์๊ณ ๋ฆฌ์ฆ ๊ธฐ๋ณธ โถ๏ธ ๐
- ์๊ฐ๋ณต์ก๋์ ๊ณต๊ฐ๋ณต์ก๋
- ์์ ํ์ ์๊ณ ๋ฆฌ์ฆ (Brute Force)
- ๋ฐฑํธ๋ํน (Backtracking)
- ๋ถํ ์ ๋ณต๋ฒ (Divide and Conquer)
- ํ์ ์๊ณ ๋ฆฌ์ฆ (Greedy)
- ๋์ ๊ณํ๋ฒ (Dynamic Programming)
- ์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ (Insertion / Selection / Bubble / Merge / Quick / Heap / Radix / Counting Sort)
- ๊ทธ๋ํ
- ์ต๋จ ๊ฒฝ๋ก ์๊ณ ๋ฆฌ์ฆ (๋ค์ต์คํธ๋ผ, ๋ฒจ๋ง-ํฌ๋, ํ๋ก์ด๋-์์ )
- ๋ถ๋ฆฌ ์งํฉ(Union Find)๊ณผ ํฌ๋ฃจ์ค์นผ(Kruskal) ์๊ณ ๋ฆฌ์ฆ
- ๋ ํฌ์ธํฐ (two-pointer)
- ๋ฌธ์์ด ์ฒ๋ฆฌ ์๊ณ ๋ฆฌ์ฆ
DFS์ BFS์ ์ฅ๋จ์ ์ ๋ํด ๊ฐ๊ฐ ์ค๋ช ํด ์ฃผ์ธ์.
- BFS ์ฅ์
- ๋๋น๋ฅผ ์ฐ์ ์ผ๋ก ํ์ํ๊ธฐ ๋๋ฌธ์ ๋ต์ด ๋๋ ๊ฒฝ๋ก๊ฐ ์ฌ๋ฌ๊ฐ์ธ ๊ฒฝ์ฐ์๋ ์ต๋จ๊ฒฝ๋ก์์ ๋ณด์ฅํฉ๋๋ค.
- ์ต๋จ ๊ฒฝ๋ก๊ฐ ์กด์ฌํ๋ค๋ฉด, ์ด๋ ํ ๊ฒฝ๋ก๊ฐ ๋ฌดํํ ๊น์ด์ง๋ค ํด๋ ์ต๋จ๊ฒฝ๋ก๋ฅผ ๋ฐ๋์ ์ฐพ์ ์ ์์ต๋๋ค.
- ๋ ธ๋์ ์๊ฐ ์ ๊ณ ๊น์ด๊ฐ ์์ ํด๊ฐ ์กด์ฌํ ๋ ์ ๋ฆฌํฉ๋๋ค.
- BFS ๋จ์
- ์ฌ๊ท ํธ์ถ์ ์ฌ์ฉํ๋ DFS์๋ ๋ฌ๋ฆฌ ํ๋ฅผ ์ด์ฉํด ๋ค์์ ํ์ํ ๋ ธ๋๋ค์ ์ ์ฅํฉ๋๋ค. ์ด ๋, ๋ ธ๋์ ์๊ฐ ๋ง์ ์๋ก ํ์์๋ ๋ ธ๋๋ค๊น์ง ์ ์ฅํด์ผํ๊ธฐ ๋๋ฌธ์ ๋ ํฐ ์ ์ฅ๊ณต๊ฐ์ด ํ์ํฉ๋๋ค.
- ๋ ธ๋์ ์๊ฐ ๋์ด๋๋ฉด ํ์ํด์ผํ๋ ๋ ธ๋ ๋ํ ๋ง์์ง๊ธฐ ๋๋ฌธ์ ๋นํ์ค์ ์ ๋๋ค.
- DFS ์ฅ์
- BFS์ ๋นํด ์ ์ฅ๊ณต๊ฐ์ ํ์์ฑ์ด ์ ๊ณ ๋ฐฑํธ๋ํน์ ํด์ผํ๋ ๋ ธ๋๋ค๋ง ์ ์ฅํด์ฃผ๋ฉด ๋ฉ๋๋ค.
- ์ฐพ์์ผํ๋ ๋ ธ๋๊ฐ ๊น์ ๋จ๊ณ์ ์์ ์๋ก, ๊ทธ ๋ ธ๋๊ฐ ์ข์ธก์ ์์ ์๋ก BFS๋ณด๋ค ์ ๋ฆฌํฉ๋๋ค.
- DFS ๋จ์
- ๋ต์ด ์๋ ๊ฒฝ๋ก๊ฐ ๋งค์ฐ ๊น๋ค๋ฉด, ๊ทธ ๊ฒฝ๋ก์ ๊น์ด ๋น ์ง ์ฐ๋ ค๊ฐ ์์ต๋๋ค.
- ๋ด๊ฐ ์ง๊ธ๊น์ง ์ฐพ์ ์ต๋จ๊ฒฝ๋ก๊ฐ ๋๊น์ง ํ์ ํ์ ๋์ ์ต๋จ๊ฒฝ๋ก๊ฐ ๋๋ค๋ ๋ณด์ฅ์ด ์์ต๋๋ค.
๋ผ์ด๋ธ๋ฌ๋ฆฌ ์์ด ์ ๋ ฌ์ ๊ตฌํํ๋ ค๊ณ ํ ๋ ์ด๋ค ์ ๋ ฌ ๋ฐฉ์์ ์ฌ์ฉํด ๊ตฌํํ ๊ฒ์ด๊ณ ์ ๊ทธ๋ ๊ฒ ์๊ฐํ๋์ง ์ฑ๋ฅ ์ธก๋ฉด์์ ์๊ธฐ๋ฅผ ํด์ฃผ์ธ์.
(์์ ๋ต์) ํต์ํธ๋ก ๊ตฌํํ ๊ฒ์ ๋๋ค. ํต์ํธ๋ average case์์ nlgn์ ์๊ฐ๋ณต์ก๋๋ฅผ ๊ฐ์ง๋ฉฐ ๊ณต๊ฐ๋ณต์ก๋ ์ธก๋ฉด์์๋ ์ ์๋ฆฌ ์ ๋ ฌ์ด๊ธฐ ๋๋ฌธ์ ์ข์ ์ฑ๋ฅ์ ๊ฐ์ง๋๋ค. worst case์ ๊ฒฝ์ฐ n^2์ ์๊ฐ๋ณต์ก๋๋ฅผ ๊ฐ์ง์ง๋ง worst case๊ฐ ๋ํ๋ ๊ฒฝ์ฐ๋ ํ๋ฅ ์ ์ผ๋ก ๋งค์ฐ ๋ฎ์ต๋๋ค. (์๋ฃ๊ฐ n๊ฐ์ผ ๋ ์ค๋ฆ์ฐจ์ ๋๋ ๋ด๋ฆผ์ฐจ์ -> 2/n!)
ํต์ํธ์์ ์ต์ ์ ๊ฒฝ์ฐ ์๊ฐ๋ณต์ก๋๋ฅผ ๊ฐ์ ์ํฌ ์ ์๋ ๋ฐฉ๋ฒ์ด ์์๊น์?
ํผ๋ฒ์ ์์น๋ฅผ ๋ค๋ฅด๊ฒ ์ค์ ํจ์ผ๋ก์จ ์๊ฐ๋ณต์ก๋๋ฅผ ๊ฐ์ ์ํฌ ์ ์์ต๋๋ค. ์ผ์ ํ ์์น์ ๋ํด์๋ง(ex. ์ฒซ๋ฒ์งธ element) ํผ๋ฒ์ ์ค์ ํ๋ ๊ฒ๋ณด๋ค ์ฒซ๋ฒ์งธ, ๋ง์ง๋ง element ์ค ๋ฌด์์๋ก ์ ํํ๋ค๊ฑฐ๋ ์ฒซ๋ฒ์งธ, ๊ฐ์ด๋ฐ, ๋ง์ง๋ง element ์ค ์ค๊ฐ๊ฐ์ ๊ณ์ฐํ์ฌ ํผ๋ฒ์ ์ค์ ํ์ ๋ ์๊ฐ๋ณต์ก๋๋ฅผ ๋ ๊ฐ์ ์ํฌ ์ ์์ต๋๋ค.
๋จธ์ง์ํธ์ ๋ถํ ์ ๋ณต ๊ณผ์ ์ ๋ํด ๋จ๊ณ๋ณ๋ก ์ค๋ช ํด์ฃผ์ธ์.
- Divide : ์ด๊ธฐ ๋ฐฐ์ด์ 2๊ฐ์ ๋ฐฐ์ด๋ก ๋ถํ
- Conquer : ๊ฐ ๋ถ๋ถ ๋ฐฐ์ด์ ์ ๋ ฌ
- Combine : ๋ถ๋ถ ๋ฐฐ์ด์ ํ๋์ ๋ฐฐ์ด๋ก ๊ฒฐํฉ
MST(Minimum Spanning Tree)๋ฅผ ๊ตฌํ๋ ์๊ณ ๋ฆฌ์ฆ์ ๋ํด ์ค๋ช ํ๊ณ , ๊ฐ๊ฐ ์ด๋ค ์ํฉ์์ ์ฌ์ฉํ๋ ๊ฒ์ด ์ ์ ํ์ง ์ค๋ช ํด ์ฃผ์ธ์.
์ ์ ์ ๊ฐ์ : V, ๊ฐ์ ์ ๊ฐ์ : E
๋ํ์ ์ผ๋ก ํ๋ฆผ ์๊ณ ๋ฆฌ์ฆ๊ณผ ํฌ๋ฃจ์ค์นผ ์๊ณ ๋ฆฌ์ฆ์ด ์์ต๋๋ค. ํ๋ฆผ ์๊ณ ๋ฆฌ์ฆ์ ์ ์ ์ ์ ํํ๊ณ ๊ทธ๊ฒ๊ณผ ์ฐ๊ฒฐ๋ ๊ฐ์ฅ ์ ์ ๋น์ฉ์ ์ ์ ์ ์ ํํ๋ ๋ฐฉ์์ด๋ฉฐ, O(ElogV)์ ์๊ฐ๋ณต์ก๋๋ฅผ ๊ฐ์ง๋๋ค. ํฌ๋ฃจ์ค์นผ ์๊ณ ๋ฆฌ์ฆ์ ๋ชจ๋ ๊ฐ์ ์ ๋ํ์ฌ ๊ฐ์ฅ ๋น์ฉ์ด ์ ์ ๊ฐ์ ์ ์ ํํ๋ ๋ฐฉ์์ด๋ฉฐ O(ElogE)์ ์๊ฐ๋ณต์ก๋๋ฅผ ๊ฐ์ง๋๋ค. ํ๋ฆผ ์๊ณ ๋ฆฌ์ฆ์ ์ ์ ์ ๊ฐ์์ ๋นํด ๊ฐ์ ์ด ๋ง์ด ์ฃผ์ด์ง ๊ฒฝ์ฐ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข๊ณ , ํฌ๋ฃจ์ค์นผ ์๊ณ ๋ฆฌ์ฆ์ ๊ฐ์ ์ ๊ฐ์์ ๋นํด ์ ์ ์ด ๋ง์ด ์ฃผ์ด์ง ๊ฒฝ์ฐ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
Minmum Spanning Tree๋ฅผ ์ฐพ๊ธฐ ์ํ ํ๋ฆผ ์๊ณ ๋ฆฌ์ฆ์ ๋์์๋ฆฌ ๋๋ ํน์ง์ ๋ํด ์ค๋ช ํด์ฃผ์ธ์
- ์์ ๋จ๊ณ์์๋ ์์ ์ ์ ๋ง์ด MST(์ต์ ๋น์ฉ ์ ์ฅ ํธ๋ฆฌ) ์งํฉ์ ํฌํจ๋๋ค.
- ์ ๋จ๊ณ์์ ๋ง๋ค์ด์ง MST ์งํฉ์ ์ธ์ ํ ์ ์ ๋ค ์ค์์ ์ต์ ๊ฐ์ ์ผ๋ก ์ฐ๊ฒฐ๋ ์ ์ ์ ์ ํํ์ฌ ํธ๋ฆฌ๋ฅผ ํ์ฅํ๋ค.์ฆ, ๊ฐ์ฅ ๋ฎ์ ๊ฐ์ค์น๋ฅผ ๋จผ์ ์ ํํ๋ค.
- ์์ ๊ณผ์ ์ ํธ๋ฆฌ๊ฐ (N-1)๊ฐ์ ๊ฐ์ ์ ๊ฐ์ง ๋๊น์ง ๋ฐ๋ณตํ๋ค.
Minmum Spanning Tree๋ฅผ ์ฐพ๊ธฐ ์ํ ํฌ๋ฃจ์ค์นผ ์๊ณ ๋ฆฌ์ฆ์ ๋์์๋ฆฌ ๋๋ ํน์ง์ ๋ํด ์ค๋ช ํด์ฃผ์ธ์
- ๊ทธ๋ํ์ ๊ฐ์ ๋ค์ ๊ฐ์ค์น์ ์ค๋ฆ์ฐจ์์ผ๋ก ์ ๋ ฌํ๋ค.
- ์ ๋ ฌ๋ ๊ฐ์ ๋ฆฌ์คํธ์์ ์์๋๋ก ์ฌ์ดํด์ ํ์ฑํ์ง ์๋ ๊ฐ์ ์ ์ ํํ๋ค.
- ์ฆ, ๊ฐ์ฅ ๋ฎ์ ๊ฐ์ค์น๋ฅผ ๋จผ์ ์ ํํ๋ค.
- ์ฌ์ดํด์ ํ์ฑํ๋ ๊ฐ์ ์ ์ ์ธํ๋ค.(Union-Find ์ฌ์ฉ)
- ํด๋น ๊ฐ์ ์ ํ์ฌ์ MST(์ต์ ๋น์ฉ ์ ์ฅ ํธ๋ฆฌ)์ ์งํฉ์ ์ถ๊ฐํ๋ค.
์ต๋จ๊ฒฝ๋ก๋ฅผ ๊ตฌํ๊ธฐ ์ํ ์๊ณ ๋ฆฌ์ฆ์ ๋ ๊ฐ์ง ์ด์ ๋งํ๊ณ ์ด๋ค ์ฐจ์ด์ ์ด ์๋์ง ์ค๋ช ํด์ฃผ์ธ์.
- ๋ค์ต์คํธ๋ผ : ํ๋์ ์์ ์ ์ ~ ๋ชจ๋ ๋ค๋ฅธ ์ ์ ๊น์ง์ ์ต๋จ ๊ฒฝ๋ก๋ฅผ ๊ตฌํ๋ค.
- ๋ฒจ๋งํฌ๋ : ํ๋์ ์์ ์ ์ ~ ๋ชจ๋ ๋ค๋ฅธ ์ ์ ๊น์ง์ ์ต๋จ ๊ฒฝ๋ก๋ฅผ ๊ตฌํ๋ค. + ๊ฐ์ค์น๊ฐ ์์์ผ ๋๋ ์ฌ์ฉ์ด ๊ฐ๋ฅํ๋ค. (์์ ์ฌ์ดํด ๊ฒ์ฌ ๊ฐ๋ฅ)
- ํ๋ก์ด๋ ์์ฌ : ๋ชจ๋ ์ ์ ~ ๋ชจ๋ ์ ์ ๊น์ง์ ์ต๋จ ๊ฒฝ๋ก๋ฅผ ๊ตฌํ๋ค.
๋ค์ต์คํธ๋ผ ์๊ณ ๋ฆฌ์ฆ ๋์์๋ฆฌ ๋๋ ํน์ง์ ์๊ฐ๋ณต์ก๋์ ์ฐ๊ด์ง์ด ์ค๋ช ํด์ฃผ์ธ์.
(๋ฐฉ๋ฒ 1)
- ์ถ๋ฐ ๋ ธ๋ S์์ ๋ชจ๋ ๋ ธ๋๋ค๊น์ง์ ์ต๋จ ๊ฑฐ๋ฆฌ๋ฅผ ์ ์ฅํ๋ ๋ฐฐ์ด D๋ฅผ ์ด๊ธฐํํ๋ค.
- ๋ฐฉ๋ฌธํ์ง ์์ ๋ ธ๋ ์ค์์ ์ต๋จ ๊ฑฐ๋ฆฌ๊ฐ ๊ฐ์ฅ ์งง์ ๋ ธ๋๋ฅผ ์ ํํ๋ค. (D ๋ฐฐ์ด ๊ฒ์ฌ)
- ์ ํํ ๋ ธ๋๋ฅผ ๊ฑฐ์ณ ๋ค๋ฅธ ๋ ธ๋๋ก ๊ฐ๋ ๋น์ฉ์ ๊ณ์ฐํ์ฌ ์ต๋จ ๊ฑฐ๋ฆฌ ๋ฐฐ์ด D๋ฅผ ๊ฐฑ์ ํ๋ค.
- ๋ชจ๋ ๋ ธ๋๋ฅผ ๋ฐฉ๋ฌธํ ๋๊น์ง 3, 4 ๊ณผ์ ์ ๋ฐ๋ณตํ๋ค.
- ๋
ธ๋์ ๊ฐ์๋ฅผ V๋ผ๊ณ ํ ๋, ์ด V*V๋ฒ ์ฐ์ฐ์ด ํ์ํ๋ฏ๋ก
O(V^2)
์ ์๊ฐ๋ณต์ก๋๋ฅผ ๊ฐ์ง๋ค.
(๋ฐฉ๋ฒ 2 - ํ/์ฐ์ ์์ํ ์ฌ์ฉ)
- ์ถ๋ฐ ๋ ธ๋ S์ ๋ํ์ฌ D ๋ฐฐ์ด์ ์ด๊ธฐํํ ๋ D[S] = 0์ ํด์ค๋ค. ์ด์ ๋์์ ํ์ ๋ ธ๋ ์ ๋ณด(๋ฒํธ, ๊ฑฐ๋ฆฌ : [S, 0])๋ฅผ ๋ฃ์ด์ค๋ค.
- ํ์์ ๋งจ ์์ ์๋ ๋ ธ๋ I๋ฅผ ๊บผ๋ธ๋ค.
- ๋ง์ผ ๊บผ๋ธ ๋ ธ๋ I์ ๊ฑฐ๋ฆฌ ์ ๋ณด๊ฐ ํ์ฌ D[I]๋ณด๋ค ํฌ๋ค๋ฉด ์ด๋ฏธ ๋ฐฉ๋ฌธํ ๋ ธ๋์ผ ๊ฒ์ด๋ฏ๋ก ๋ฌด์ํ๋ค.
- I๋ฅผ ๋์์ผ๋ก ๋ค์ต์คํธ๋ผ ์๊ณ ๋ฆฌ์ฆ์ ์ํํ๋๋ฐ, D ๋ฐฐ์ด์ด ๊ฐฑ์ ๋ ๊ฒฝ์ฐ ๊ทธ ๋ ธ๋ ์ ๋ณด๋ฅผ ํ์ ๋ฃ๋๋ค.
- ํ์ ๋ ธ๋๊ฐ ์์ ๋๊น์ง 2-4 ๊ณผ์ ์ ๋ฐ๋ณตํ๋ค.
- ๋
ธ๋์ ๊ฐ์๋ฅผ V, ๊ฐ์ ์ ๊ฐ์๋ฅผ E๋ผ๊ณ ํ ๋ ์๊ฐ ๋ณต์ก๋๋
O(ElogV)
์ด๋ค.
๋ค์ต์คํธ๋ผ ์๊ณ ๋ฆฌ์ฆ์์ ํ(์ฐ์ ์์ํ)์ ์ฌ์ฉํ ๊ฒฝ์ฐ ์ด๋ค ์ ์์ ์๊ฐ๋ณต์ก๋๊ฐ ๊ฐ์ ์ด ๋๋์?
๋ค์ต์คํธ๋ผ ์๊ณ ๋ฆฌ์ฆ์์ ๋ฐฉ๋ฌธํ์ง ์์ ๋
ธ๋ ์ค ์ต๋จ ๊ฑฐ๋ฆฌ๊ฐ ๊ฐ์ฅ ์งง์ ๋
ธ๋๋ฅผ ์ ํํ๋ ๊ณผ์ ์ด ์๋๋ฐ, ์ด ๊ณผ์ ์์ O(๋
ธ๋์ ๊ฐ์
)๋งํผ์ ๋น์ฉ์ด ๋ฐ์ํ๊ฒ ๋ฉ๋๋ค. ํ(์ฐ์ ์์ํ)์ ์ฌ์ฉํ ๊ฒฝ์ฐ ๊ทธ ๋น์ฉ์ O(log{ํ์ ์ ์ฅํ ๋
ธ๋์ ๊ฐ์}
)๋ก ์ค์ผ ์ ์์ต๋๋ค.
๋ฒจ๋งํฌ๋ ์๊ณ ๋ฆฌ์ฆ ๋์์๋ฆฌ ๋๋ ํน์ง์ ์๊ฐ๋ณต์ก๋์ ์ฐ๊ด์ง์ด ์ค๋ช ํด์ฃผ์ธ์.
- ์์ ๊ฐ์ค์น๋ฅผ ๊ฐ์ง๋ ๊ฐ์ ๋ ๊ฐ๋ฅํ๋ฏ๋ก, ์์ ์ฌ์ดํด์ ์กด์ฌ ์ฌ๋ถ๋ฅผ ๋ฐ์ ธ์ผ ํ๋ค.
- ์ต๋จ ๊ฑฐ๋ฆฌ๋ฅผ ๊ตฌํ๊ธฐ ์ํด์ V - 1๋ฒ E๊ฐ์ ๋ชจ๋ ๊ฐ์ ์ ํ์ธํ๋ค.
- ์์ ์ฌ์ดํด ์กด์ฌ ์ฌ๋ถ๋ฅผ ํ์ธํ๊ธฐ ์ํด์ ํ ๋ฒ ๋ (V๋ฒ์งธ) E๊ฐ์ ๊ฐ์ ์ ํ์ธํ๋ค.
- ์ด ๋ ๊ฑฐ๋ฆฌ ๋ฐฐ์ด์ด ๊ฐฑ์ ๋์๋ค๋ฉด, ๊ทธ๋ํ G๋ ์์ ์ฌ์ดํด์ ๊ฐ์ง๋ค.
- ๋ฐ๋ผ์ ์ด V x E ๋ฒ ์ฐ์ฐํ๋ฏ๋ก O(VE)์ ์๊ฐ๋ณต์ก๋๋ฅผ ๊ฐ์ง๋ค.
ํ๋ก์ด๋ ์์ฌ ์๊ณ ๋ฆฌ์ฆ ๋์์๋ฆฌ ๋๋ ํน์ง์ ์๊ฐ๋ณต์ก๋์ ์ฐ๊ด์ง์ด ์ค๋ช ํด์ฃผ์ธ์.
- ์ฌ์ดํด์ด ์๋ค๋ฉด ์์ ๊ฐ์ค์น๋ฅผ ๊ฐ์ ธ๋ ์ ์ฉ ๊ฐ๋ฅํ๋ค.
- ๋์ ๊ณํ๋ฒ(Dynamic Programming)์ผ๋ก ์ ๊ทผํ๋ค.
- ๋ชจ๋ ๊ฐ๋ฅํ ๊ฒฝ์ ์ง์ ๋ํด์ ๋ชจ๋ ์ ์ -> ๋ชจ๋ ์ ์ ์ผ๋ก ๊ฐ๋ ์ต๋จ ๊ฑฐ๋ฆฌ๋ฅผ ํ์ธํ๋ฏ๋ก ์ฐ์ฐ ํ์๋ V^3์ด๊ณ , ๋ฐ๋ผ์ ์๊ฐ๋ณต์ก๋๋ O(V^3)
KMP ์๊ณ ๋ฆฌ์ฆ์ ๋ํด ์ค๋ช ํด์ฃผ์ธ์.
Kunth, Morris, Prett์ด ๋ง๋ ์๊ณ ๋ฆฌ์ฆ์ด๋ผ์ ๊ฐ ์ด๋ฆ์ ์์๋ฆฌ๋ฅผ ๋ฐ์ KMP๋ผ๊ณ ์ง์ด์ก์ต๋๋ค. ๋ฌธ์์ด์ด ๋ถ์ผ์นํ ๋ ๊ทธ ๋ค์ ๋ฌธ์๋ถํฐ ๋ค์ ํ์์ ์์ํ๋ ๊ฒ์ด ์๋๋ผ ์ง๊ธ๊น์ง ์ผ์นํ๋ ์ ๋ณด๋ค์ ๋ฒ๋ฆฌ์ง ๋ง๊ณ ์ฌ์ฌ์ฉ ํจ์ผ๋ก์จ ๋ช์นธ ์ ๋๋ ๊ฑด๋ ๋ฐ์ด์ ํ์ํ์๋ ์์ด๋์ด์์ ์๊ณ ๋ฆฌ์ฆ์ด ํ์ํ์ต๋๋ค. ์ ๋์ฌ์ ์ ๋ฏธ์ฌ ์ ๋ณด๋ฅผ ๊ฐ์ง๊ณ ๋ฌธ์์ด์ ์ ํํด๊ฐ๋ฉฐ ํ์ํ๋๋ฐ, Naiveํ ๋ฌธ์์ด ํ์ ์๊ณ ๋ฆฌ์ฆ์ด O(NM)์ ์๊ฐ๋ณต์ก๋๋ฅผ ๊ฐ๋ ๋ฐ๋ฉด์ KMP์๊ณ ๋ฆฌ์ฆ์ O(N+M)์ ์๊ฐ๋ณต์ก๋๋ฅผ ๊ฐ์ต๋๋ค.
๋ผ๋น ์นดํ ์๊ณ ๋ฆฌ์ฆ์ ๋ํด ์ค๋ช ํด์ฃผ์ธ์.
๋ฌธ์์ด์ ํด์ํจ์๊ฐ์ ์ด์ฉํฉ๋๋ค. ํ์ ๋์ ๋ฌธ์์ด์ ๊ธธ์ด๋ฅผ M์ด๋ผ๊ณ ํ์ ๋ ๊ธ์ M์นธ์ฉ, ํ์นธ ํ์นธ ์ฎ๊ฒจ๊ฐ๋ฉฐ ๋ถ๋ถ ๋ฌธ์์ด์ ๋ผ์ด๋ด๊ณ ํด์ํจ์๊ฐ์ ๊ตฌํ์ฌ ํ์ ๋ฌธ์์ด์ ํด์ํจ์๊ฐ๊ณผ ๋น๊ตํฉ๋๋ค. ํด์ํจ์๊ฐ ์ถฉ๋์ด ์๋ค๋ ๊ฐ์ ํ์ ๊ธ์ ๊ธธ์ด๋ฅผ N์ด๋ผ๊ณ ํ๋ฉด O(N-M)์ ์๊ฐ๋ณต์ก๋๋ฅผ ๊ฐ์ต๋๋ค.
๋ผ๋น ์นดํ ์๊ณ ๋ฆฌ์ฆ์ด KMP๋ณด๋ค ๋น ๋ฅธ๊ฐ?
์ฌ์ค์ ๊ทธ๋ ์ง ์์ต๋๋ค. ํ์ ๋ฌธ์์ด์ ๊ธธ์ด๊ฐ ๊ธธ์ด์ง ์๋ก ํด์ํจ์๊ฐ์ ์ถฉ๋์ด ์๊ธธ ํ๋ฅ ์ด ๋์ต๋๋ค. ๋ฐ๋ผ์ ํด์ํจ์๊ฐ์ด ์ผ์นํ๋ค๊ณ ๋ฌด์กฐ๊ฑด ๋ฌธ์๊ฐ ์ผ์นํ๋ค๊ณ ๋ณด์ฅํ ์ ์๊ธฐ ๋๋ฌธ์ ํด์ํจ์๊ฐ์ด ์ผ์นํ์ ๋ ๋ฌธ์์ด์ ์ง์ ๋น๊ตํ๋ 2์ฐจ์ ์ธ ๊ฒ์ฆ์ด ํ์ํฉ๋๋ค. ๋ฐ๋ผ์ ํ๊ท ์ ์ผ๋ก ๋ผ๋น ์นดํ ๋ํ O(N+M)์ ์๊ฐ๋ณต์ก๋๊ฐ ์๊ตฌ๋ฉ๋๋ค.
์๋ฃ๊ตฌ์กฐ์ ํ ์ข ๋ฅ์ธ ํธ๋ผ์ด๋ฅผ ์ค๋ช ํด์ฃผ์ธ์.
ํธ๋ผ์ด๋ ๋ฌธ์์ด์ ์ ์ฅํ๊ณ ํจ์จ์ ์ผ๋ก ํ์ํ๊ธฐ ์ํ ํธ๋ฆฌ ํํ์ ์๋ฃ๊ตฌ์กฐ์ด๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก k์งํธ๋ฆฌ ๊ตฌ์กฐ๋ฅผ ๋ ๊ณ ์ด๋ค ๋ฌธ์์ด ์งํฉ S์ ๋ฌธ์์ด A๊ฐ ์๋ค๊ณ ํ ๋ A๊ฐ S์์ ์กด์ฌํ๋์ง ์ฐพ๋๋ฐ์ ์ฌ์ฉ๋๋ ์๋ฃ๊ตฌ์กฐ์ด๋ค.
ํธ๋ผ์ด์ ์ฅ์ ๊ณผ ๋จ์ ์ ์ค๋ช ํด์ฃผ์ธ์.
์ด๋ถํ์์ ํ์ํ๋๋ฐ์ ์์ด ๊ฒ์์ด์ ์ต๋ ๊ธธ์ด M * ์ ์ฒด ๋ฐ์ดํฐ N ์ค O(M log N)์ ์ฌ์ฉํ๊ฒ ๋๋๋ฐ ์ด์ ๋ฐํด ํธ๋ผ์ด๋ ๋ฌธ์์ด ํ์์์์ ์ ์ฒด ๋ฐ์ดํฐ์ ๊ธธ์ด์ธ ์๊ฐ๋ณต์ก๋ O(N)์ ๊ฐ์ง๊ฒ ๋์ด ๋งค์ฐ ํจ์จ์ ์ด๋ค. ํ์ง๋ง ํธ๋ผ์ด์ ๋จ์ ์ ๊ณต๊ฐ ๋ณต์ก๋๊ฐ ๋๋ค. ์ํ๋ฒณ์ ์ ์ฅํ๋ ํํ๋ผ๋ฉด 1 depth๋น 26๊ฐ์ ๊ณต๊ฐ์ด ์ฌ์ฉ๋ ์ ์๋ค.
ํธ๋ผ์ด ์๋ฃ๊ตฌ์กฐ๋ฅผ ์ฌ์ฉํ ์ ์ด ์๋์? ๊ฒฝํ์ ์ด์ผ๊ธฐํด์ฃผ์ธ์.
๋ชจ๋ฒ ๋ต์) ์๊ณ ๋ฆฌ์ฆ์ ๊ณต๋ถํ๋ ๊ณผ์ ์์ ํธ๋ผ์ด ์๋ฃ๊ตฌ์กฐ๋ฅผ ์ด์ฉํ์ฌ ์ํธ์ฝ๋ผ์ ์๊ณ ๋ฆฌ์ฆ์ ์์ฑํ์ฌ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ๊ฒฝํ์ด ์์ต๋๋ค. ์ํธ์ฝ๋ผ์ ์๊ณ ๋ฆฌ์ฆ์ KMP์์ ์ฌ์ฉํ๋ Failure Function์ ํธ๋ผ์ด๋ก ํ์ฅ์ํจ ์๊ณ ๋ฆฌ์ฆ์ผ๋ก ๋ฌธ์์ด ํ์์ ์ฌ์ฉํ์์ต๋๋ค.
ํฌํฌ์ธํฐ๋ผ๋ ์๊ณ ๋ฆฌ์ฆ ๋ฌธ์ ํด๊ฒฐ ์ ๋ต์ด ์์ต๋๋ค. ์ด๋ค ์๊ณ ๋ฆฌ์ฆ์ด๊ณ ์ฃผ๋ก ์ด๋ค ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋๋ฐ ์ฌ์ฉ๋๋์?
๋ฐฐ์ด์ ๊ฐ๋ฆฌํค๋ ํฌ์ธํฐ 2๊ฐ๋ฅผ ์ด์ฉํด์ ํฌ์ธํฐ๋ฅผ ํ์นธ ์ฉ ์์ง์ด๋ฉฐ ํน์ ๊ตฌ๊ฐ ๋ด์์ ์ํ๋ ๊ฐ์ ์ป์ ๋ ์ฌ์ฉํฉ๋๋ค. ์๋ฅผ ๋ค๋ฉด ์ฐ์๋๋ ๋ฐฐ์ด์ ๊ตฌ๊ฐ ์ค ํน์ ์กฐ๊ฑด์ ๋ง์กฑํ๋ ๊ฐ์ฅ ์งง์ ๊ตฌ๊ฐ์ ๊ตฌํ๋ ๋ฌธ์ ์์ ์ฌ์ฉ๋ ์ ์์ต๋๋ค.