๐ Computer Science/Algorithm8 [์๊ณ ๋ฆฌ์ฆ] ๊ทธ๋ํ ์๊ณ ๋ฆฌ์ฆ ๊ทธ๋ํ(Graph) ๋ ธ๋(Node)์ ๋ ธ๋ ์ฌ์ด์ ์ฐ๊ฒฐ๋ ๊ฐ์ (Edge)์ ์ ๋ณด๋ฅผ ๊ฐ์ง๊ณ ์๋ ์๋ฃ๊ตฌ์กฐ ์๋ก ๋ค๋ฅธ ๊ฐ์ฒด(ํน์ ๊ฐ์ฒด)(Object)๊ฐ ์ฐ๊ฒฐ๋์ด ์๋ค๋ ๋ฌธ์ ๋ ๊ทธ๋ํ ์๊ณ ๋ฆฌ์ฆ ๋ ์ฌ๋ฆฌ๊ธฐ ๊ทธ๋ํ ๊ตฌํ ๋ฐฉ๋ฒ ์ธ์ ํ๋ ฌ(Adjacency Matrix) : 2์ฐจ์ ๋ฐฐ์ด ์ฌ์ฉ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ด ๋ง์ด ํ์ํ์ง๋ง ํน์ ๋ ธ๋ ๊ฐ ๊ฐ์ ์ ๋น์ฉ์ O(1) ์๊ฐ์ผ๋ก ์ฆ์ ์ ์ ์์ ์ธ์ ๋ฆฌ์คํธ (Adjacency List) : ๋ฆฌ์คํธ ์ฌ์ฉ ๊ฐ์ ์ ๊ฐ์์ธ O(E) ๋งํผ๋ง ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ด ํ์ํ์ง๋ง O(V) ์๊ฐ ์์ ๊ทธ๋ํ ํธ๋ฆฌ ๋ฐฉํฅ์ฑ ๋ฐฉํฅ ๊ทธ๋ํ ํน์ ๋ฌด๋ฐฉํฅ ๊ทธ๋ํ ๋ฐฉํฅ ๊ทธ๋ํ ์ํ์ฑ ์ํ ๋ฐ ๋น์ํ ๋น์ํ ๋ฃจํธ ๋ ธ๋ ์กด์ฌ ์ฌ๋ถ ๋ฃจํธ ๋ ธ๋๊ฐ ์์ ๋ฃจํธ ๋ ธ๋๊ฐ ์กด์ฌ ๋ ธ๋๊ฐ ๊ด๊ณ์ฑ ๋ถ๋ชจ์ ์์ ๊ด๊ณ ์์ ๋ถ๋ชจ ์์ ๊ด๊ณ.. 2022. 4. 14. [์๊ณ ๋ฆฌ์ฆ] ์ต๋จ ๊ฒฝ๋ก(Shortest Path) ์ต๋จ ๊ฒฝ๋ก(Shortest Path) ์๊ณ ๋ฆฌ์ฆ ๊ฐ์ฅ ์งง์ ๊ฒฝ๋ก๋ฅผ ์ฐพ๋ ์๊ณ ๋ฆฌ์ฆ ๊ธธ ์ฐพ๊ธฐ ๋ฌธ์ ๋ผ๊ณ ๋ ๋ถ๋ฆผ ๊ทธ๋ํ๋ฅผ ์ด์ฉํ์ฌ ํํ ๊ฐ ์ง์ ์ ๋ ธ๋๋ก ํํ ์ง์ ๊ณผ ์ฐ๊ฒฐ๋ ๋๋ก๋ ๊ฐ์ ์ผ๋ก ํํ ์ต๋จ ๊ฒฝ๋ก ๋ฌธ์ ์ ์ข ๋ฅ ๋จ์ผ ์ถ๋ฐ(single-source) ์ต๋จ ๊ฒฝ๋ก ์ด๋ค ํ๋์ ์ ์ ์์ ์ถ๋ฐํ์ฌ ๋๋จธ์ง ๋ชจ๋ ์ ์ ๊น์ง์ ์ต๋จ ๊ฒฝ๋ก๋ฅผ ์ฐพ๋ ๋ฌธ์ ๋จ์ผ ๋์ฐฉ(single-destination) ์ต๋จ ๊ฒฝ๋ก ๋ชจ๋ ์ ์ ์์ ์ถ๋ฐํ์ฌ ์ด๋ค ํ๋์ ์ ์ ๊น์ง์ ์ต๋จ ๊ฒฝ๋ก๋ฅผ ์ฐพ๋ ๋ฌธ์ ๊ทธ๋ํ ๋ด์ ๊ฐ์ ์ ๋ค์ง์ผ๋ฉด ๋จ์ผ ์ถ๋ฐ ์ต๋จ๊ฑฐ๋ฆฌ ๋ฌธ์ ๋ก ๋ฐ๋ ์ ์์ ๋จ์ผ ์(single-pair) ์ต๋จ ๊ฒฝ๋ก ๋ชจ๋ ์ ์ ์๋ค ์ฌ์ด์ ์ต๋จ ๊ฒฝ๋ก๋ฅผ ์ฐพ๋ ๋ฌธ์ ์ฃผ์ ์๊ณ ๋ฆฌ์ฆ ๋ค์ต์คํธ๋ผ(Dijkstra) ์๊ณ ๋ฆฌ์ฆ ๋ฒจ๋ง-ํฌ๋(Bellman-Ford-Moo.. 2022. 3. 31. [์๊ณ ๋ฆฌ์ฆ] ๋ค์ด๋๋ฏน ํ๋ก๊ทธ๋๋ฐ(Dynamic Programming) ์ปดํจํฐ๋ฅผ ํ์ฉํด๋ ์ด๋ ค์ด ๋ฌธ์ ์ต์ ์ ํด๋ฅผ ๊ตฌํ๊ธฐ์ ์๊ฐ์ด ๋งค์ฐ ๋ง์ด ํ์ํ ๋ฌธ์ ์ต์ ์ ํด๋ฅผ ๊ตฌํ๊ธฐ์ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ด ๋งค์ฐ ๋ง์ด ํ์ํ ๋ฌธ์ ์ปดํจํฐ๋ ์ฐ์ฐ ์๋์ ํ๊ณ๊ฐ ์๊ณ , ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ์ฌ์ฉํ ์ ์๋ ๋ฐ์ดํฐ์ ๊ฐ์๋ ํ์ ์ ์ด๋ผ ๋ง์ ์ ์ฝ ๋ฐ์ โ ์ฐ์ฐ ์๋์ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ์ต๋ํ์ผ๋ก ํ์ฉํ ์ ์๋ ํจ์จ์ ์ธ ์๊ณ ๋ฆฌ์ฆ ์์ฑ ํ์ ๋ค์ด๋๋ฏน ํ๋ก๊ทธ๋๋ฐ(Dynamic Programming) ๋์ ๊ณํ๋ฒ ํฐ ๋ฌธ์ ๋ฅผ ์๊ฒ ๋๋๊ณ , ๊ฐ์ ๋ฌธ์ ๋ผ๋ฉด ํ ๋ฒ์ฉ๋ง ํ์ด ๋ฌธ์ ๋ฅผ ํจ์จ์ ์ผ๋ก ํด๊ฒฐํ๋ ์๊ณ ๋ฆฌ์ฆ ๊ธฐ๋ฒ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ์ฝ๊ฐ ๋ ์ฌ์ฉํ๋ฉด ์ฐ์ฐ ์๋๋ฅผ ๋น์ฝ์ ์ผ๋ก ์ฆ๊ฐ์ํฌ ์ ์๋ ๋ฐฉ๋ฒ ๋ค์ด๋๋ฏน ํ๋ก๊ทธ๋๋ฐ์ ๋ค์ ์กฐ๊ฑด์ ๋ง์กฑํ ๋๋ง ์ฌ์ฉ ๊ฐ๋ฅ ํฐ ๋ฌธ์ ๋ฅผ ์์ ๋ฌธ์ ๋ก ๋๋ ์ ์๋ค. ์์ ๋ฌธ์ ์์ ๊ตฌํ ์ ๋ต์ ๊ทธ๊ฒ์ .. 2022. 3. 30. [์๊ณ ๋ฆฌ์ฆ] ์ด์ง ํ์(Binary Search) ์์ฐจ ํ์(Sequential Search) ๋ฆฌ์คํธ ์์ ์๋ ํน์ ํ ๋ฐ์ดํฐ๋ฅผ ์ฐพ๊ธฐ ์ํด ์์์๋ถํฐ ํ๋์ฉ ์ฐจ๋ก๋๋ก ํ์ธํ๋ ๋ฐฉ๋ฒ ์ ๋ ฌ ์ฌ๋ถ์ ์๊ด์์ด ๊ฐ์ฅ ์์์๋ถํฐ ํ๋์ฉ ํ์ธ ์ ๋ ฌ๋์ง ์์ ๋ฆฌ์คํธ์์ ๋ฐ์ดํฐ๋ฅผ ์ฐพ์์ผ ํ ๋ ์ฌ์ฉ ๋ฆฌ์คํธ ๋ด์ ๋ฐ์ดํฐ๊ฐ ์๋ฌด๋ฆฌ ๋ง์๋ ์๊ฐ๋ง ์ถฉ๋ถํ๋ค๋ฉด ํญ์ ์ํ๋ ๋ฐ์ดํฐ๋ฅผ ์ฐพ์ ์ ์์ ์๊ฐ ๋ณต์ก๋ → O(N) ์ด์ง ํ์(Binary Search) ํ์ ๋ฒ์๋ฅผ ์ ๋ฐ์ฉ ์ขํ๊ฐ๋ฉฐ ๋ฐ์ดํฐ๋ฅผ ํ์ ์ฐพ์ผ๋ ค๋ ๋ฐ์ดํฐ์ ์ค๊ฐ์ ์์น์ ์๋ ๋ฐ์ดํฐ๋ฅผ ๋ฐ๋ณต์ ์ผ๋ก ๋น๊ตํ์ฌ ์ํ๋ ๋ฐ์ดํฐ ํ์ ์์น๋ฅผ ๋ํ๋ด๋ ์์์ , ๋์ , ์ค๊ฐ์ 3๊ฐ์ ๋ณ์ ์ฌ์ฉ ๋ฐฐ์ด ๋ด๋ถ์ ๋ฐ์ดํฐ๊ฐ ์ ๋ ฌ๋์ด ์์ด์ผ๋ง ์ฌ์ฉ ๊ฐ๋ฅ ์๊ฐ ๋ณต์ก๋ → O(logN) ํธ๋ฆฌ ์๋ฃ๊ตฌ์กฐ ๋๋ณด๊ธฐ ํธ๋ฆฌ(Tree) ๊ตฌ์กฐ ๋ ธ๋์ ๋ ธ๋์ ์ฐ.. 2022. 3. 25. [์๊ณ ๋ฆฌ์ฆ] ์ ๋ ฌ(Sorting) ์ ๋ ฌ(Sorting) ๋ฐ์ดํฐ๋ฅผ ํน์ ํ ๊ธฐ์ค์ ๋ฐ๋ผ ์์๋๋ก ๋์ดํ๋ ๊ฒ์ ๋งํ๋ค. ์ ํ ์ ๋ ฌ(Selection Sort) ์ ๋ ฌ๋์ง ์์ ๋ฐ์ดํฐ ์ค์์ ๊ฐ์ฅ ์์ ๊ฒ์ ์ ํํด ๋งจ ์์ผ๋ก ๋ณด๋ธ๋ค. ๋ค๋ฅธ ์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ๋ค์ ๋นํด ๋นํจ์จ์ ์ด๋ค. → ์๊ฐ ๋ณต์ก๋: O(N^2) ์ฝ์ ์ ๋ ฌ(Insertion Sort) ๋ฐ์ดํฐ๋ฅผ ํ๋์ฉ ํ์ธํ๋ฉฐ, ๊ฐ ๋ฐ์ดํฐ๋ฅผ ์ ์ ํ ์์น์ ์ฝ์ ํ๋ค. ๋ฐ์ดํฐ๊ฐ ๊ฑฐ์ ์ ๋ ฌ๋์ด ์์ ๋ ํจ์จ์ ์ด๋ค. → ์๊ฐ ๋ณต์ก๋: O(N^2) ํต ์ ๋ ฌ(Quick Sort) ๊ธฐ์ค ๋ฐ์ดํฐ๋ฅผ ์ค์ ํ๊ณ , ๊ทธ ๊ธฐ์ค๋ณด๋ค ํฐ ๋ฐ์ดํฐ์ ์์ ๋ฐ์ดํฐ์ ์์น๋ฅผ ๋ฐ๊พผ๋ค. ํผ๋ฒ(Pivot): ๊ธฐ์ค ๋ฐ์ดํฐ → ํ๊ท ์๊ฐ ๋ณต์ก๋: O(NlogN) ๊ณ์ ์ ๋ ฌ(Count Sort) ๊ฐ์ฅ ์์ ๋ฐ์ดํฐ๋ถํฐ ๊ฐ์ฅ ํฐ ๋ฐ์ดํฐ๊น์ง ๋ชจ๋ ๋ด๊ธธ .. 2022. 3. 24. [์๊ณ ๋ฆฌ์ฆ] DFS/ BFS ํ์(Search): ๋ง์ ์์ ๋ฐ์ดํฐ ์ค์์ ์ํ๋ ๋ฐ์ดํฐ๋ฅผ ์ฐพ๋ ๊ณผ์ ๊ทธ๋ํ, ํธ๋ฆฌ ๋ฑ์ ์๋ฃ๊ตฌ์กฐ ์์์ ํ์ํ๋ ๋ฌธ์ ๋ฅผ ์ฃผ๋ก ๋ค๋ฃฌ๋ค. ๋ํ์ ์ธ ํ์ ์๊ณ ๋ฆฌ์ฆ์ผ๋ก DFS์ BFS๊ฐ ์๋ค. ๋ ์๊ณ ๋ฆฌ์ฆ์ ์ดํดํ๊ธฐ ์ํด ํ์ํ ์๋ฃ๊ตฌ์กฐ ๋๋ณด๊ธฐ ์๋ฃ๊ตฌ์กฐ(Data Struture): ๋ฐ์ดํฐ๋ฅผ ํํํ๊ณ ๊ด๋ฆฌํ๊ณ ์ฒ๋ฆฌํ๊ธฐ ์ํ ๊ตฌ์กฐ ์คํ๊ณผ ํ๋ ์๋ฃ๊ตฌ์กฐ์ ๊ธฐ์ด ๊ฐ๋ ์ผ๋ก ๋ค์ ๋ ํต์ฌ ํจ์๋ก ๊ตฌ์ฑ๋๋ค. ์ฝ์ (Push): ๋ฐ์ดํฐ๋ฅผ ์ฝ์ ์ญ์ (Pop): ๋ฐ์ดํฐ๋ฅผ ์ญ์ ์ค๋ฒํ๋ก์ฐ(Overflow): ํน์ ์๋ฃ๊ตฌ์กฐ๊ฐ ์์ฉํ ์ ์๋ ๋ฐ์ดํฐ์ ํฌ๊ธฐ๋ฅผ ๋์ ์ํ์์ ์ฝ์ ์ฐ์ฐ์ ์ํํ ๋ ๋ฐ์ ์ธ๋ํ๋ก์ฐ(Underflow): ํน์ ์๋ฃ๊ตฌ์กฐ์ ๋ฐ์ดํฐ๊ฐ ๋ค์ด์์ง ์์ ์ํ์์ ์ญ์ ์ฐ์ฐ ์ํ ์ ๋ฐ์ ์คํ(Stack): ๋ฐ์ดํฐ.. 2022. 3. 23. ์ด์ 1 2 ๋ค์ ๋ฐ์ํ