์ผ๋ฐ์ ์ผ๋ก ์ฝ๋ฉํ ์คํธ ๋ฌธ์ ๋ฅผ ํ๋ค๋ณด๋ฉด DFS ์ ๋ฐฑํธ๋ ํน์ ๋จ์ด๋ฅผ ํผ์ฉํด ๊ฐ๋ฉฐ ๋ฌธ์ ๋ฅผ ํธ๋ ๋ชจ์ต์ ์ค์ค๋ก ๋ฐ๊ฒฌํ ์ ์๋ค. DFS๋ ๊ฐ๋ ์ ์ผ๋ก ์๊ณ , ๋ฐฑํธ๋ํน๋ ๋๋์ ์ผ๋ก ์๊ณ ์๋๋ฐ, ์ด ๋์ ์ฐจ์ด๊ฐ ์กฐ๊ธ ์๋ค๋ ์ฌ์ค์ ๊นจ๋ฌ์๋ค. ๊ทธ๋ฆฌ๊ณ ์ฐ๋ฆฌ๊ฐ ๋ง์ด ํผ๋ํด ๊ฐ๋ฉฐ ์ฐ๋ ๊ฐ๋ ๋ค์ ๋ค์ ํ๋ฒ ๋ค์ก์ ๋ณด๋ ค๊ณ ํ๋ค.
๐ฏDFS & Backtracking
๋จผ์ ์ฐ๋ฆฌ๊ฐ ์๊ณ ์๋ DFS ์ ๋ฐฑํธ๋ํน ๊ฐ๋ ๋ง๊ณ ์ค์ ์คํผ์ ๋ก ์ ํด์ง ๊ฐ๋ ์ด๋ค.
- ๊น์ด ์ฐ์ ํ์ (DFS):
- DFS๋ ๊ทธ๋ํ๋ ํธ๋ฆฌ์ ๊ฐ์ ์๋ฃ ๊ตฌ์กฐ๋ฅผ ํ์ํ๋ ์๊ณ ๋ฆฌ์ฆ์ ๋๋ค.
- ์์ ๋ ธ๋์์ ์์ํ์ฌ ๋ค์ ๋ถ๊ธฐ๋ก ๋์ด๊ฐ๊ธฐ ์ ์ ํ์ฌ ๋ถ๊ธฐ๋ฅผ ์์ ํ ํ์ํฉ๋๋ค.
- DFS๋ ์ผ๋ฐ์ ์ผ๋ก ๊ทธ๋ํ์์ ์ฐ๊ฒฐ๋ ๋ชจ๋ ๋ ธ๋๋ฅผ ๋ฐฉ๋ฌธํ๋ ๋ชฉ์ ์ผ๋ก ์ฌ์ฉ๋ฉ๋๋ค.
- ์ผ๋ฐ์ ์ผ๋ก ์คํ์ด๋ ์ฌ๊ท ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ๊ตฌํ๋ฉ๋๋ค.
- ๋ฐฑํธ๋ํน (Backtracking):
- ๋ฐฑํธ๋ํน์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ๊ฐ๋ฅํ ๋ชจ๋ ํ๋ณด ํด๊ฒฐ์ฑ ์ ์กฐ์ฌํ๋ฉด์, ์ด๋ค ํ๋ณด๊ฐ ํ์ฌ์ ๋ฌธ์ ์ ํด๊ฐ ๋ ๊ฐ๋ฅ์ฑ์ด ์๋ค๊ณ ํ๋จ๋๋ฉด ํด๋น ํ๋ณด๋ฅผ ๋ฒ๋ฆฝ๋๋ค.
- ๋ฐฑํธ๋ํน์ ์ฃผ๋ก ์กฐํฉ, ์์ด, ๋ถ๋ถ ์งํฉ, ์ค๋์ฟ , N-ํธ ๋ฌธ์ ์ ๊ฐ์ด ๊ฒฐ์ ๋ฌธ์ (Decision Problem)๋ ์ต์ ํ ๋ฌธ์ (Optimization Problem)์์ ์ฌ์ฉ๋ฉ๋๋ค.
- ๋ฐฑํธ๋ํน์ DFS๋ฅผ ํ์ฉํ์ฌ ๊ตฌํ๋ ์ ์์ต๋๋ค.
์์ฝํ๋ฉด, ๋ฐฑํธ๋ํน์ ๋ฌธ์ ์ ๋ชจ๋ ๊ฐ๋ฅํ ํ๋ณด๋ฅผ ์กฐ์ฌํ๋ฉด์ ์ต์ ํด๋ ๋ฌธ์ ์ ๋ต์ ์ฐพ๋ ๊ฒ์ ๋ชฉํ๋ก ํ๋ฉฐ, DFS๋ ๊ทธ๋ํ๋ ํธ๋ฆฌ์ ๊ฐ์ ์๋ฃ ๊ตฌ์กฐ์์ ๋ชจ๋ ๋ ธ๋๋ฅผ ๋ฐฉ๋ฌธํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค. DFS๋ ๋ฐฑํธ๋ํน์ ์ผ๋ถ ๊ตฌํ ๋ฐฉ๋ฒ ์ค ํ๋์ผ ์ ์์ง๋ง, ๋ฐฑํธ๋ํน์ ๋ณด๋ค ์ผ๋ฐ์ ์ผ๋ก ์ต์ ํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํ ์ ๋ต์ ์๋ฏธํฉ๋๋ค.
์ ์ค๋ช ์ ๋ณด๋ฉด ๋ค์ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ด ๊ทธ๋ฆด ์ ์๋ค.
์ฝ๋ฉ ํ ์คํธ๋ ๋ฎ์ ์๊ฐ ๋ณต์ก๋ ๊ทธ๋ฆฌ๊ณ ๋ฎ์ ๊ณต๊ฐ ๋ณต์ก๋ ๊ทธ๋ฆฌ๊ณ ๋์ ํจ์จ์ฑ์ ๊ฐ์ง๋ ์ ๋ต์ ์ฐพ์์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํด์ผ ํ๋ค. ๋ฐ๋ผ์ DFS ๋ก ๋ฌธ์ ๋ฅผ ํ๋ ํด๋น๋ถ๊ธฐ๊ฐ ์ ๋ต ํ๋ณด์ง์์ ํ๋ฝ ํ๋ฉด ๊ทธ ๋ถ๊ธฐ์ ์์ ๋ ธ๋๋ค์ ํ์ธํ ํ์๊ฐ ์๊ธฐ ๋๋ฌธ์ Cut - edge (์ปท์ฃ์ง)๋ผ๋ ๊ฑธ ํตํด ๊ฐ์ง์น๊ธฐ๋ฅผ ํ๊ณ ๋ค์ ๋ถ๊ธฐ๋ฅผ ํ์ธํ๋ ๋ก์ง์ ๋ง์ด ์ด๋ค.
ํ์ง๋ง, DFS ๋ ๊ทธ๋ํ์ ์ฐ๊ฒฐ๋ ๋ชจ๋ ๋ ธ๋๋ค์ ๋ฐฉ๋ฌธํ์ฌ ์ ๋ต์ ์ฐพ๋ ์์ ํ์์ ๊ฐ๊น๊ณ , DFS + Cut - edge๋ฅผ ์ฐ๋ ๋ฐฉ์์ด ๋ฐ๋ก ๋ฐฑํธ๋ํน์ด์๋ ๊ฒ์ด๋ค.
์๋๋ฉด ๋ค์๊ณผ ๊ฐ์ ์๋ ์๊ฒ ๋ค.
๐ ฑ๏ธ๐ ๋ฐฑํธ๋ํน - Backtracking
๊ทธ๋ฌ๋ฉด ๋ฐฑํธ๋ํน(Backtracking)์ 'ํด๊ฐ ์๋๋ผ๋ฉด ๋ค์ ๋์์จ๋ค ๋๋ ๋ฒ๋ฆฐ๋ค'๊ณ ์ธ๊ธํ๋๋ฐ, ์ด ๋ถ๋ถ์ ๊ฐ์ง์น๊ธฐ๋ผ๊ณ ๋ถ๋ฅธ๋ค. ์ฆ ๋ถํ์ํ ๊ฒฝ๋ก๋ ๊ตณ์ด ๋๊น์ง ํ์ํ์ง ์๊ฒ ๋ค๋ ๊ฒ์ด๋ค. ์ง๊ด์ ์ผ๋ก ๋ด๋ ๋ฐฑํธ๋ํน์ ํจ์จ์ฑ์ ์ผ๋ง๋ ๊ฐ์ง์น๊ธฐ๋ฅผ ์ ์ ํ ํด๋ด๋๋์ ๋ฌธ์ ๋ก ๋ณผ ์๋ ์์ ๊ฒ์ด๋ค.
๊ทธ๋ผ ๋ฐฑํธ๋ํน์ ์ฉ์ด ๋ํ ํ ๋ฒ ๋ณด๊ณ ๊ฐ๋ ค๊ณ ํ๋ค.
- ์ ๋งํจ(promising): ์งํ์ค์ธ ๊ฒฝ๋ก๊ฐ ํด๋ต์ ์ฐพ์ ๊ฐ๋ฅ์ฑ์ด ์์
- ์ ๋งํ์ง ์์(nopromising): ์งํ์ค์ธ ๊ฒฝ๋ก๊ฐ ํด๋ต์ ์ฐพ์ ๊ฐ๋ฅ์ฑ์ด ์์
- ๊ฐ์ง์น๊ธฐ(pruning): ์ ๋งํ์ง ์์ ํ์ ํธ๋ฆฌ๋ฅผ ์๋ผ๋
๐ก๋ด๊ฐ ํผ๋ํ๋ฉฐ ์ฐ๋ Cut - edge ๋ผ๋ ๊ฒ์ ๊ฐ์ง์น๊ธฐ๋ก ์๋ ๊ฐ๋ ๋๋ก๋ผ๋ฉด pruning ์ด์๋ค.
๋๋ถ๋ถ์ ๋ฌธ์ ํ์ด๋ฅผ ๋ฐฑํธ๋ ํน์ผ๋ก ํ๊ณ ์๋ ๊ฒ์ด๋ค. ๊ทธ๋ฌ๋ DFS๋ฅผ ์จ์ ์ ๋งํ์ง ์์ ๊ฐ์ง๋ฅผ ์๋ฅด๋ ๋ก์ง ๋ง ์กฐ๊ธ ์ถ๊ฐํ๋ฉด ๋๋ ๋ง์ ๋ฌธ์ ๋ค์ด ๊ทธ๋ฅ DFS ๋ฌธ์ ๋ก ์ฃผ์ ๋ฅผ ์ ํด ๋ ๊ฒ ๊ฐ๋ค.
DFS๋ฅผ ์ฌ์ฉํ ์์ ํ์์ ์ฌ์ฉํ ํ์ด์ ๋ฐฑํธ๋ํน์ ์ฌ์ฉํ ์ต์ ์ ๋ต์ ๊ตฌํ๋ ๋ํ์ ์ธ ์ฝํ ๋ฌธ์ ๋ฅผ ๋ช๊ฐ์ง ์๊ฐํ๊ฒ ๋ค.
๐์์๋ฌธ์
DFS
ํ๋ก๊ทธ๋๋จธ์ค - ํผ๋ก๋
https://school.programmers.co.kr/learn/courses/30/lessons/87946
ํ๋ก๊ทธ๋๋จธ์ค
์ฝ๋ ์ค์ฌ์ ๊ฐ๋ฐ์ ์ฑ์ฉ. ์คํ ๊ธฐ๋ฐ์ ํฌ์ง์ ๋งค์นญ. ํ๋ก๊ทธ๋๋จธ์ค์ ๊ฐ๋ฐ์ ๋ง์ถคํ ํ๋กํ์ ๋ฑ๋กํ๊ณ , ๋์ ๊ธฐ์ ๊ถํฉ์ด ์ ๋ง๋ ๊ธฐ์ ๋ค์ ๋งค์นญ ๋ฐ์ผ์ธ์.
programmers.co.kr
ํ๋ก๊ทธ๋๋จธ์ค - ๋ฌด์ธ๋ ์ฌํ
https://school.programmers.co.kr/learn/courses/30/lessons/154540
ํ๋ก๊ทธ๋๋จธ์ค
์ฝ๋ ์ค์ฌ์ ๊ฐ๋ฐ์ ์ฑ์ฉ. ์คํ ๊ธฐ๋ฐ์ ํฌ์ง์ ๋งค์นญ. ํ๋ก๊ทธ๋๋จธ์ค์ ๊ฐ๋ฐ์ ๋ง์ถคํ ํ๋กํ์ ๋ฑ๋กํ๊ณ , ๋์ ๊ธฐ์ ๊ถํฉ์ด ์ ๋ง๋ ๊ธฐ์ ๋ค์ ๋งค์นญ ๋ฐ์ผ์ธ์.
programmers.co.kr
๋ฐฑํธ๋ํน ( Backtracking )
๋ฐฑ์ค - N๊ณผ M
https://www.acmicpc.net/problem/15650
15650๋ฒ: N๊ณผ M (2)
ํ ์ค์ ํ๋์ฉ ๋ฌธ์ ์ ์กฐ๊ฑด์ ๋ง์กฑํ๋ ์์ด์ ์ถ๋ ฅํ๋ค. ์ค๋ณต๋๋ ์์ด์ ์ฌ๋ฌ ๋ฒ ์ถ๋ ฅํ๋ฉด ์๋๋ฉฐ, ๊ฐ ์์ด์ ๊ณต๋ฐฑ์ผ๋ก ๊ตฌ๋ถํด์ ์ถ๋ ฅํด์ผ ํ๋ค. ์์ด์ ์ฌ์ ์์ผ๋ก ์ฆ๊ฐํ๋ ์์๋ก ์ถ๋ ฅํด
www.acmicpc.net
๋ฐฑ์ค - N-Queen
https://www.acmicpc.net/problem/9663
9663๋ฒ: N-Queen
N-Queen ๋ฌธ์ ๋ ํฌ๊ธฐ๊ฐ N × N์ธ ์ฒด์คํ ์์ ํธ N๊ฐ๋ฅผ ์๋ก ๊ณต๊ฒฉํ ์ ์๊ฒ ๋๋ ๋ฌธ์ ์ด๋ค. N์ด ์ฃผ์ด์ก์ ๋, ํธ์ ๋๋ ๋ฐฉ๋ฒ์ ์๋ฅผ ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
www.acmicpc.net
์ฐธ๊ณ
https://kwanik.tistory.com/34
'Algorithm > BFS & DFS' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Algorithm] DFS ์ ์ฌ๊ท ํจ์( Recursive Function ) (0) | 2023.10.31 |
---|
๋๊ธ