๐ ์๊ณ ๋ฆฌ์ฆ์ด๋?
์๊ณ ๋ฆฌ์ฆ์ ํน์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ์ํํด์ผ ํ๋ ๋ช
ํํ ๋จ๊ณ๋ฅผ ์๋ฏธํฉ๋๋ค. ์ผ๋ฐ์ ์ผ๋ก ์๊ณ ๋ฆฌ์ฆ์ ํ๊ฐํ ๋ ์๊ฐ ๋ณต์ก๋(Time Complexity)์ ๊ณต๊ฐ ๋ณต์ก๋(Space Complexity)๋ฅผ ์ฌ์ฉํฉ๋๋ค.
- ์๊ฐ ๋ณต์ก๋: ์๊ณ ๋ฆฌ์ฆ ์คํ์ ๊ฑธ๋ฆฌ๋ ์๊ฐ์ ๋ํ๋ด๋ฉฐ, ์ผ๋ฐ์ ์ผ๋ก Big-O ํ๊ธฐ๋ฒ์ ์ฌ์ฉํฉ๋๋ค.
- ๊ณต๊ฐ ๋ณต์ก๋: ์๊ณ ๋ฆฌ์ฆ์ด ํ์๋ก ํ๋ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ๋ํ๋
๋๋ค.
1๏ธโฃ ํ์ ์๊ณ ๋ฆฌ์ฆ(Search Algorithm)
์ฃผ์ ์๊ณ ๋ฆฌ์ฆ
- ์ ํ ํ์(Linear Search): ๋ฐ์ดํฐ๋ฅผ ์ฒ์๋ถํฐ ๋๊น์ง ์์ฐจ์ ์ผ๋ก ๊ฒ์ํ๋ ๋ฐฉ์์
๋๋ค.
- ์ด์ง ํ์(Binary Search): ์ ๋ ฌ๋ ๋ฐฐ์ด์์ ์ค๊ฐ ๊ฐ์ ๊ธฐ์ค์ผ๋ก ํ์ ๋ฒ์๋ฅผ ์ขํ๋๊ฐ๋ ๋ฐฉ์์
๋๋ค.
- ์๊ฐ ๋ณต์ก๋:
O(log n)
์ฌ์ฉ ์ฌ๋ก
- ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ฒ์
- ํน์ ๊ฐ ์กด์ฌ ์ฌ๋ถ ํ์ธ
2๏ธโฃ ์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ(Sort Algorithm)
์ฃผ์ ์๊ณ ๋ฆฌ์ฆ
- ๋ฒ๋ธ ์ ๋ ฌ(Bubble Sort): ์ธ์ ํ ๋ ๊ฐ์ ๋น๊ตํ์ฌ ์์น๋ฅผ ๋ฐ๊พธ๋ฉฐ ์ ๋ ฌํฉ๋๋ค.
- ์ฝ์
์ ๋ ฌ(Insertion Sort): ์์๋ฅผ ํ๋์ฉ ์ ์ ํ ์์น์ ์ฝ์
ํ๋ฉฐ ์ ๋ ฌํฉ๋๋ค.
- ์๊ฐ ๋ณต์ก๋: ํ๊ท
O(nยฒ), ์ต์ O(n)
- ๋ณํฉ ์ ๋ ฌ(Merge Sort): ๋ฐ์ดํฐ๋ฅผ ๋๋๊ณ ์ ๋ ฌํ ๋ค ํฉ์น๋ ๋ฐฉ์์ผ๋ก ์ ๋ ฌํฉ๋๋ค.
- ์๊ฐ ๋ณต์ก๋:
O(n log n)
- ํต ์ ๋ ฌ(Quick Sort): Pivot์ ๊ธฐ์ค์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ๋๋์ด ์ ๋ ฌํฉ๋๋ค.
- ์๊ฐ ๋ณต์ก๋: ํ๊ท
O(n log n), ์ต์
O(nยฒ)
์ฌ์ฉ ์ฌ๋ก
- ๋ฐ์ดํฐ ์ฒ๋ฆฌ ๋ฐ ๋ถ์
- ๊ฒ์ ํจ์จ ๊ฐ์ ์ ์ํ ์ฌ์ ์ ๋ ฌ
3๏ธโฃ ์ฌ๊ท ์๊ณ ๋ฆฌ์ฆ(Recursive Algorithm)
์ฌ๊ท๋?
- ํจ์๊ฐ ์๊ธฐ ์์ ์ ํธ์ถํ์ฌ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ๋ฐฉ์์
๋๋ค.
- ๋ถํ ์ ๋ณต(Divide and Conquer) ์ ๋ต์์ ์์ฃผ ์ฌ์ฉ๋ฉ๋๋ค.
์ฃผ์ ์์
- ํฉํ ๋ฆฌ์ผ ๊ณ์ฐ
- ํผ๋ณด๋์น ์์ด
- ํ๋
ธ์ด์ ํ(Tower of Hanoi)
์ฅ๋จ์
- ์ฅ์ : ์ฝ๋๊ฐ ์ง๊ด์ ์ด๊ณ ๊ฐ๊ฒฐํฉ๋๋ค.
- ๋จ์ : ํธ์ถ ์คํ ์ค๋ฒํค๋๋ก ์ธํด ๋ฉ๋ชจ๋ฆฌ ์๋ชจ๊ฐ ํด ์ ์์ต๋๋ค.
4๏ธโฃ ๋์ ๊ณํ๋ฒ(Dynamic Programming, DP)
DP๋?
- ํฐ ๋ฌธ์ ๋ฅผ ์์ ๋ฌธ์ ๋ก ๋๋์ด ํด๊ฒฐํ๊ณ , ๊ฒฐ๊ณผ๋ฅผ ์ ์ฅํด ์ฌ์ฌ์ฉํ๋ ๋ฐฉ์์
๋๋ค.
- ์ค๋ณต ๊ณ์ฐ์ ํผํจ์ผ๋ก์จ ํจ์จ์ฑ์ ๊ทน๋ํํฉ๋๋ค.
์ฃผ์ ์์
- ํผ๋ณด๋์น ์์ด์ ํจ์จ์ ๊ณ์ฐ
- ๋ฐฐ๋ญ ๋ฌธ์ (Knapsack Problem)
- ์ต์ฅ ๊ณตํต ๋ถ๋ถ ์์ด(LCS)
ํต์ฌ ์์ด๋์ด
- ๋ฉ๋ชจ์ด์ ์ด์
(Memoization): ์ค๊ฐ ๊ฒฐ๊ณผ๋ฅผ ์ ์ฅํ์ฌ ์ค๋ณต ๊ณ์ฐ ๋ฐฉ์ง
- ์ํฅ์ ์ ๊ทผ๋ฒ(Bottom-Up Approach)
5๏ธโฃ ๊ทธ๋ํ ์๊ณ ๋ฆฌ์ฆ(Graph Algorithm)
๊ทธ๋ํ ์๊ณ ๋ฆฌ์ฆ์ด๋?
- ๊ทธ๋ํ ๊ตฌ์กฐ์์ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๊ฑฐ๋ ํน์ ์์ฑ์ ๋ถ์ํ๋ ์๊ณ ๋ฆฌ์ฆ์
๋๋ค.
์ฃผ์ ์๊ณ ๋ฆฌ์ฆ
- ๋๋น ์ฐ์ ํ์(BFS): ๊ฐ๊น์ด ๋
ธ๋๋ถํฐ ํ์ํฉ๋๋ค.
- ๊น์ด ์ฐ์ ํ์(DFS): ๊น์ด ๋ค์ด๊ฐ๋ฉฐ ํ์ ํ ๋๋์์ต๋๋ค.
- ๋ค์ต์คํธ๋ผ ์๊ณ ๋ฆฌ์ฆ(Dijkstra's Algorithm): ๊ฐ์ค์น๊ฐ ์๋ ๊ทธ๋ํ์์ ์ต๋จ ๊ฒฝ๋ก๋ฅผ ์ฐพ์ต๋๋ค.
- ์๊ฐ ๋ณต์ก๋:
O((V+E)logV)
- ํ๋ก์ด๋-์์
์๊ณ ๋ฆฌ์ฆ(Floyd-Warshall Algorithm): ๋ชจ๋ ์์ ์ ์ ๊ฐ ์ต๋จ ๊ฒฝ๋ก๋ฅผ ์ฐพ์ต๋๋ค.
์ฌ์ฉ ์ฌ๋ก
- ๋คํธ์ํฌ ๊ฒฝ๋ก ์ฐพ๊ธฐ
- GPS ๊ธธ ์ฐพ๊ธฐ ์์คํ
6๏ธโฃ ํ์ ์๊ณ ๋ฆฌ์ฆ(Greedy Algorithm)
ํ์ ์๊ณ ๋ฆฌ์ฆ์ด๋?
- ๋งค ์๊ฐ ์ต์ ์ ์ ํ์ ํ์ฌ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ์๊ณ ๋ฆฌ์ฆ์
๋๋ค.
- ํญ์ ์ต์ ์ ๊ฒฐ๊ณผ๋ฅผ ๋ณด์ฅํ์ง๋ ์์ต๋๋ค.
์ฃผ์ ์์
- ๋์ ๊ฑฐ์ค๋ฆ๋ ๋ฌธ์
- ์ต์ ์ ์ฅ ํธ๋ฆฌ(MST) - ํฌ๋ฃจ์ค์นผ(Kruskal), ํ๋ฆผ(Prim) ์๊ณ ๋ฆฌ์ฆ
ํน์ง
- ๊ฐ๋จํ ๊ตฌํ ๋ฐ ๋น ๋ฅธ ์๋
- ์ต์ ์ ํด๋ฅผ ๋ณด์ฅํ์ง ์์ ์ ์์ต๋๋ค(๋ฌธ์ ์ ๋ฐ๋ผ ๋ค๋ฆ)
7๏ธโฃ ๋ฐฑํธ๋ํน(Backtracking)
๋ฐฑํธ๋ํน์ด๋?
- ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ๊ฐ๋ฅํ ๋ชจ๋ ๊ฒฝ์ฐ๋ฅผ ํ์ํ๋ ๋ฐฉ์์
๋๋ค.
- ์กฐ๊ฑด์ ๋ง์กฑํ์ง ์๋ ๊ฒฝ์ฐ ๋ค์ ์ด์ ๋จ๊ณ๋ก ๋์๊ฐ ๋ค๋ฅธ ๊ฐ๋ฅ์ฑ์ ํ์ํฉ๋๋ค.
์ฃผ์ ์์
- N-Queen ๋ฌธ์
- ์ค๋์ฟ ํผ์ฆ
- ๋ฏธ๋ก ์ฐพ๊ธฐ ๋ฌธ์
ํน์ง
- ๊น์ด ์ฐ์ ํ์(DFS)์ ๊ธฐ๋ฐ์ผ๋ก ํฉ๋๋ค.
- ๋ชจ๋ ๊ฐ๋ฅํ ๊ฒฝ์ฐ๋ฅผ ํ์ํ๋ฏ๋ก ์์ ํ์(Brute Force)์ ์ผ์ข
์
๋๋ค.
โ๏ธ ์๊ณ ๋ฆฌ์ฆ ํ์ต์ ์ค์์ฑ ๋ฐ ๋ง๋ฌด๋ฆฌ
์๊ณ ๋ฆฌ์ฆ์ ํ์ตํ๋ฉด ๋ณต์กํ ๋ฌธ์ ๋ฅผ ํจ์จ์ ์ผ๋ก ํด๊ฒฐํ ์ ์๋ ๋ฅ๋ ฅ์ด ์๊น๋๋ค. ์๋ฃ๊ตฌ์กฐ์ ํจ๊ป ์๊ณ ๋ฆฌ์ฆ์ ์ดํดํ๋ฉด ํ๋ก๊ทธ๋๋ฐ ์ค๋ ฅ์ ํฌ๊ฒ ํฅ์์ํฌ ์ ์์ต๋๋ค.
๋ค์ ๊ธ์์๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ํด ๋ค๋ฃจ๊ฒ ์ต๋๋ค. ๋ฐ์ดํฐ ์ฒ๋ฆฌ์ ์ ์ฅ์ ์ด๋ป๊ฒ ํ๋์ง ๋ ๊น์ด ์ดํด๋ณด๊ฒ ์ต๋๋ค!
๐ ๋ณธ ๊ธ์ ์๊ณ ๋ฆฌ์ฆ์ ์ฒ์ ์ ํ๋ ๋ถ๋ค์ด ๊ฐ๋
์ ์ดํดํ๊ณ ๋ค์ํ ์๊ณ ๋ฆฌ์ฆ์ ํน์ง์ ํ์
ํ ์ ์๋๋ก ์์ฑ๋์์ต๋๋ค. ๋ค์ ์ฅ์์ ์ด์ด๊ฐ๋๋ค!