๐ฟ Data/๋ถํธ์บ ํ
[TIL] 104. [์๋ฃ๊ตฌ์กฐ] ์ํ
ํค์๋ ์ํ(ํธ๋ฆฌ : ์ ์/์ค์/ํ์, ๊ทธ๋ํ : BFS/DFS) ์ํ(Traversal) ํธ๋ฆฌ, ๊ทธ๋ํ์ ๊ฐ์ด ์ฐ๊ฒฐ๋ ์๋ฃ๊ตฌ์กฐ์์ ๋ชจ๋ ๋ ธ๋๋ฅผ ํ ๋ฒ์ฉ ํ์ํ๋ ๊ฒ ์ํ์ ๋ชฉ์ : ๋ชจ๋ ํน์ ํน์ ๋ ธ๋๋ฅผ ๋ฐฉ๋ฌธํ๋ ๋ฐฉ๋ฒ์ ์ฐพ๋ ๊ฒ ๋ฐฉํฅ์ ๋ฐ๋ผ ์ํํ๋ ๋ฐฉ๋ฒ์ด ๋ฌ๋ผ์ง๋ค. [์ํ] ํธ๋ฆฌ๊ตฌ์กฐ ํธ๋ฆฌ ๊ตฌ์กฐ์์์ ์ํ๋ ํฌ๊ฒ ์ ์, ์ค์, ํ์๋ก ๋๋์ด์ง๋ค. ์ ์ : 1. Root node -> 2. Left node -> 3. Right node ์ค์ : 1. Left node -> 2. Root node -> 3. Right node ํ์ : 1. Left node -> 2. Right node -> 3. Root node ๋จ์ํ๊ฒ ์ผ์ชฝ์์ ์ค๋ฅธ์ชฝ์ด๋ฉด์ Root node์ ์์น์ ๋ฐ๋ผ ๋๋์ด์ง๋ค๊ณ ์๊ฐํ๋ฉด ์ฝ๋ค..
[TIL] 103. [์๋ฃ๊ตฌ์กฐ] ๊ทธ๋ํ
ํค์๋ ๊ทธ๋ํ ์ธ์ ํ๋ ฌ/์ธ์ ๋ฆฌ์คํธ ๊ทธ๋ํ ๊ทธ๋ํ๋ ๊ธฐ๋ณธ์ ์ผ๋ก vert(๋ ธ๋, ์ ์ )์ edge(๊ฐ์ , ๋งํฌ)๋ก ๊ตฌ์ฑ๋์ด์๋ค. ๊ทธ๋ํ๋ ๋ ธ๋๊ฐ์ ๊ด๊ณ, ํธ๋ฆฌ๋ ๋ ธ๋๊ฐ์ ๊ณ์ธต์ ํํ ๋ฐฉํฅ์ฑ(๋จ๋ฐฉํฅ, ์๋ฐฉํฅ) ์์๊ฐ ์กด์ฌํ๊ธฐ ๋๋ฌธ์ ๋ง์ง๋ง ๋ ธ๋๊ฐ Leaf node๊ฐ ๋๋ค. ์๋ฐฉํฅ ํํ์ ๊ฒฝ์ฐ, ๊ทธ ์ฃผ๋ชฉ์ ์ด ๋ ธ๋๊ฐ์ ์ํธ ๊ตํ(์๋ก ๋ ธ๋ ์ ๋ณด๋ฅผ ๊ณต์ ) ๋ฌด๋ฐฉํฅ์ฑ ๋ฐฉํฅ์ด ์กด์ฌํ์ง ์๊ณ ์ฐ๊ฒฐ๋ ๋ ธ๋๋ค(์ด์ ๋ ธ๋๋ค)๋ผ๋ฆฌ ์๋ก ์ธ์ ์ํ์ฑ ๊ทธ๋ํ๊ฐ ๊ฐ์ง ์ ์๋ ์ฑ์ง๋ก, ์์ ๊ฐ์ด ์ํ์ ํ์ฑํ ์ ์๋ค. [๊ทธ๋ํ] ์ธ์ ๋ฆฌ์คํธ, ์ธ์ ํ๋ ฌ ๊ทธ๋ํ ์๋ฃ๊ตฌ์กฐ๋ฅผ ๊ตฌํํ๋ ๋๊ฐ์ง ๋ฐฉ๋ฒ ์ธ์ ๋ฆฌ์คํธ ๊ทธ๋ํ์ ํํ๋ฅผ ๋ฆฌ์คํธ๋ก ํํ ์ ์ฒด ๋ ธ๋์ ๋ชฉ๋ก์ ์ ์ฅํ๊ณ ์๋ค. ํ์ด์ฌ์ ๋์ ๋๋ฆฌ๋ก ๊ทธ๋ํ๋ฅผ ๊ตฌํํ ์์) class Graph: d..
[TIL] 102. [์๋ฃ๊ตฌ์กฐ] ํด์ํ ์ด๋ธ
ํค์๋ ํด์ ํด์ํจ์ ํด์ํ ์ด๋ธ ํด์์ถฉ๋(์ฒด์ด๋, ์คํ ์ด๋๋ ์ฑ) ํด์ํ ์ด๋ธ ํค(key)๋ฅผ ํ์ฉํ์ฌ ๊ฐ(value)์ ์ง์ ์ ๊ทผ์ด ๊ฐ๋ฅํ ๊ตฌ์กฐ ํด์ฑ์ ์ฃผ๋ ๋ชฉ์ ์ ๊ฒ์ ๋ฐ์ดํฐ์ ์๊ณผ ์๊ด์์ด ์ฑ๋ฅ์ด ๋น ๋ฅด๋ค.(ํค๋ฅผ ํตํด ๋ฐ๋ก ๊ฐ์ ๊ฒ์ํ๊ธฐ๋๋ฌธ) ํ์ด์ฌ์ ๋์ ๋๋ฆฌ๋ ๋ด๋ถ์ ์ผ๋ก ํด์ํ ์ด๋ธ ๊ตฌ์กฐ ํด์ํจ์ ํด์ํจ์๋ฅผ ํตํด ํค๋ฅผ ํด์ํ ์ด๋ธ ๋ด์ ๋ฒํท(=hashes)๋ก ๋งคํ ํด์ํจ์์ ์ ๋ ฅ๊ฐ ํํ๋ ๋ค์ํ์ง๋ง, ์ถ๋ ฅ๊ฐ์ ํํ๋ ์ซ์ ์ ๋ ฅ๊ฐ๊ณผ ์ถ๋ ฅ๊ฐ์ด ์ผ๋์ผ ๋์์ด ๋์ด์ผ ํ๋ค. ์ค์ ๋ก๋ ์๋ฒฝํ ์ผ๋์ผ ๋์์ ์ด๋ ค์ฐ๋ฉฐ, ๋ค๋ฅธ ์ ๋ ฅ๊ฐ์ ๋ํด ๊ฐ์ ์ถ๋ ฅ์ด ๋์ค๋ ๊ฒฝ์ฐ๋ฅผ ํด์์ถฉ๋์ด๋ผ๊ณ ํ๋ค. ์ผ๋ฐ์ ์ผ๋ก ํด์ํจ์๋ ๋ฌธ์์ด ์ ๋ ฅ๊ฐ์ ์ ์ํ ์ถ๋ ฅ๊ฐ์ผ๋ก ๋ฐํ ํด์์ฑ๋ฅ O(1) ์๊ฐ๋ณต์ก๋ ์์ ๊ฒ์, ์ฝ์ , ์ญ์ ๋ฅผ ํ ์ ์๋ค.(ํด..
[TIL] 101. [๋ถํ ์ ๋ณต, ์ ๋ ฌ] ํต ์ ๋ ฌ, ๋ณํฉ ์ ๋ ฌ
ํค์๋ ๋ถํ ์ ๋ณต ํต ์ ๋ ฌ ๋ณํฉ ์ ๋ ฌ ๋ถํ ์ ๋ณต ๋ณต์กํ๊ฑฐ๋ ํฐ ๋ฌธ์ ๋ฅผ ์์ ํ์ ๋ฌธ์ ๋ก ๋๋์ด ํธ๋ ๋ฐฉ๋ฒ ๋ฌธ์ ๋ฅผ ๋๋์ด ๋ณ๋ ฌ์ ์ผ๋ก ํด๊ฒฐ ๊ฐ๋ฅ(๋จ, ๋ฌธ์ ํด๊ฒฐ์ ์ํด ํจ์๊ฐ ์ฌ๊ท์ ์ผ๋ก ํธ์ถ๋ ์ ์์ผ๋ฏ๋ก ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋ ์ฆ๊ฐ) ๋ถํ (Divide) : ๋ฌธ์ ๋ฅผ ์๊ฒ ์๊ฒ ๋๋๋ ๊ณผ์ ์ ๋ณต(Conquer) : ์๊ฒ ๋๋ ๋ฌธ์ ๋ฅผ ํ๋์ฉ return ํ์ฌ ์ ๋ณต(ํน์ ๊ฐ์ ๋์ถ) ๋จผ์ Divide๋ฅผ ํ ํ ๊ทธ์ ์ญ์์ผ๋ก ์์ ๋ฌธ์ ๋ถํฐ ํ๋ํ๋ ์ ๋ณตํด์ ์ต์ข ๊ฒฐ๊ณผ๊ฐ์ ๋์ถ ๋จ, ๊ณผ์ฐ ์ด ๋ฌธ์ ๋ฅผ ๋ถํ ์ ๋ณต์ผ๋ก ํด๊ฒฐํ๋ ๊ฒ์ด ๋ ํจ์จ์ ์ธ ๊ฒ์ด๋ ์๊ฐํด๋ณผ ํ์๊ฐ ์๋ค! ์๋๋ ์ฌ๊ท์ ๋ถํ ์ ๋ณต์ ์ฐจ์ด(๋ถํ ์ ๋ณต์ ๋ณดํต ์ฌ๊ทํจ์๋ฅผ ํ์ฉ) [์ ๋ ฌ, ๋ถํ ์ ๋ณต] ํต ์ ๋ ฌ(Quick Sort) ํผ๋ฒ(pivot)์ด๋ผ๋ ๊ฐ์ ํน์ ์ง์ด์ฃผ๊ณ (๋ณด..
[TIL] 100. [์๊ณ ๋ฆฌ์ฆ] ํ์
ํค์๋ ํ์ ์ ํํ์ ์ด์งํ์ [์๊ณ ๋ฆฌ์ฆ] ํ์ ์๋ฃ๋ฅผ ํ๋์ฉ ํ์ํ๋ ์๊ณ ๋ฆฌ์ฆ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด์๋ ๋ฌธ์ ๋ฅผ ํ์ํด์ผํ๋ค. [ํ์] ์ ํํ์(Linear Search) ๊ธฐ๋ณธ์ ์ธ ํ์ ์๊ณ ๋ฆฌ์ฆ์ผ๋ก ํ๋ฒ์ ํ๋์ฉ ์ฐจ๊ทผ์ฐจ๊ทผ ๋ชจ๋ ๊ฒ์ํ๋ ๊ฒ def linear_search(arr, value): for i in range(len(arr)): if arr[i] == value: return i [ํ์] ์ด์งํ์(Binary Search) ํ์์ ํ ๋, ๋ฐ์ฉ ์ค์ฌ๋๊ฐ๋ฉด์ ํ์ ๋ง์น ์ ๋ค์ด ๊ฒ์์์ ๊ฐ์ด๋ฐ ๊ฐ์ ๋งํ๋ฉด ์ ์ ์ขํ๋๊ฐ๋ ๋ฐฉ์ ๋จ, ๋ฐ์ดํฐ๊ฐ ์ด๋ฏธ ์ ๋ ฌ๋ ๊ฒฝ์ฐ์๋ง ์๋ํ๋ค. O(logn)์ ์๊ฐ๋ณต์ก๋๋ฅผ ๊ฐ๋๋ค.(๊ทธ๋ฃน์ 2๊ฐ์ฉ ๋๋๋ฉด์ ์งํํ๊ธฐ ๋๋ฌธ) def binary_search(arr, valu..