๐
์๋ ํ์๋ ต๋๊น์ - ! (feat. ์ฃผ์ฐ์ฌ)
์ค๋์ ๋ฐฑํธ๋ํน ์๊ณ ๋ฆฌ์ฆ์ ๋ธ๋ฃจํธํฌ์ค ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์์ง ๊ณ๋ค์ธ ๊ธ์ ๊ฐ์ ธ์์ต๋๋ค์ ๐
๋ฐฑํธ๋ํน(Backtracking)
๋ฐฑํธ๋ํน(Backtracking)์ด๋, ํด๋ฅผ ์ฐพ๋ ๋์ค์ ํ์ฌ ๊ฒฝ๋ก์ ์ ๋ง์ฑ์ ํ๋จํ์ฌ ํด๊ฐ ๋ ๊ฒ ๊ฐ์ง ์์ผ๋ฉด ๋๋์๊ฐ์ ๋ค์ ํด๋ฅผ ์ฐพ์๊ฐ๋ ๊ธฐ๋ฒ์ด๋ค.
๋ฐฑํธ๋ํน ์๊ณ ๋ฆฌ์ฆ์ ํ์ ๊ณผ์ ์์ ๋ถํ์ํ ๊ฒฝ์ฐ๋ฅผ ๋ฐฐ์ ํ์ฌ ์คํ์๊ฐ์ ๋จ์ถ์ํค๋ ํน์ง์ ๊ฐ์ง๊ณ ์๋ค. ์ฆ, ๊ฐ๋ฅํ ๊ฒฝ์ฐ์ ์๋ฅผ ์์ฐจ์ ์ผ๋ก ์๋ํ๋ค๊ฐ ์กฐ๊ฑด์ ๋ง์กฑํ์ง ์๋ ๊ฒฝ์ฐ์ ์ด์ ๋จ๊ณ๋ก ๋์๊ฐ ๋ค์ ๊ฒฝ์ฐ๋ฅผ ์๋ํ๋ค. ์ด๋ฌํ ๊ณผ์ ์ ์ฌ๊ท์ ์ผ๋ก ์งํํ๋ฉฐ ์ต์ ์ ํด๋ฅผ ์ฐพ์ ๋๊น์ง ํ์์ ์งํ !
์ฃผ๋ก ์กฐํฉ์ ์ธ ๋ฌธ์ ๋ ์ ์ฝ ์กฐ๊ฑด์ด ์๋ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ๋ฐ ์ฌ์ฉ๋๋ค. ๋ํ์ ์ธ ์๋ก๋ ์ค๋์ฟ , N-Queen ๋ฌธ์ ๋ฑ์ด ์๋ค.
๋ฐฑํธ๋ํน ์๊ณ ๋ฆฌ์ฆ์ ๊ตฌ์กฐ
- ๋ฌธ์ ์ ํด๋ฅผ ํํํ ๋ฐ์ดํฐ ๊ตฌ์กฐ ์ ์
- ํด๋ฅผ ๊ตฌํ๋ ๋ฐ์ ํ์ํ ์ ์ฝ ์กฐ๊ฑด ์ ์
- ํด๋ฅผ ์ฐพ๊ธฐ ์ํด ํ์์ ์งํํ๋ ํจ์ ๊ตฌํ
- ํ์ฌ ์ํ์์ ๊ฐ๋ฅํ ๋ค์ ๋จ๊ณ ํ์, ์กฐ๊ฑด์ ๋ง์กฑํ๋์ง ํ์ธ (ํ์ ํจ์ ๋ด)
- ์กฐ๊ฑด์ ๋ง์กฑํ์ง ์๋ ๊ฒฝ์ฐ, ์ด์ ๋จ๊ณ๋ก ๋์๊ฐ ๋ค์ ๊ฒฝ์ฐ ์๋
- ์ต์ ์ ํด๋ฅผ ์ฐพ์์ ๋ ๊ฒฐ๊ณผ ๋ฐํ ๋ฐ ์ข ๋ฃ
๋ธ๋ฃจํธํฌ์ค(Brute Force) ์๊ณ ๋ฆฌ์ฆ
๋ธ๋ฃจํธํฌ์ค ์๊ณ ๋ฆฌ์ฆ์ ๊ฐ๋ฅํ ๋ชจ๋ ๊ฒฝ์ฐ์ ์๋ฅผ ํ์ํ์ฌ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ๋ฐฉ๋ฒ์ด๋ค. ์ผ๋ฐ์ ์ผ๋ก ๊ฐ์ฅ ์ง๊ด์ ์ด๊ณ ๊ฐ๋จํ ์ ๊ทผ๋ฒ ์ค ํ๋์ด๋ฉฐ, ์ฃผ์ด์ง ๋ฌธ์ ์ ๋ํด ๋ชจ๋ ๊ฐ๋ฅ์ฑ์ ์๋ํ์ฌ ์ ํํ ํด๋ฅผ ์ฐพ๋๋ค. ์์ธ ์์ด 100%์ ํ๋ฅ ๋ก ์ ๋ต๋ง์ ์ฐพ๋๋ค. ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ํ์คํ์ง๋ง ๊ฒฝ์ฐ์ ์๊ฐ ๋ง์ ๊ฒฝ์ฐ์ ์๊ฐ์ด ์ค๋ ๊ฑธ๋ฆฌ๋ ๋จ์ ์ด ์๋ค.
ํนํ, ๊ทธ๋ํ ํ์ ๋ฐฉ๋ฒ์ธ ์์ฐจ ํ์, ๊น์ด ์ฐ์ ํ์, ๋๋น ์ฐ์ ํ์์ ์ฌ์ฉํ์ฌ ๋ธ๋ฃจํธํฌ์ค ์๊ณ ๋ฆฌ์ฆ์ ๊ตฌํํ ์ ์๋ค. ์ ๋ฆฌํ๋ฉด, ๋ธ๋ฃจํธํฌ์ค ์๊ณ ๋ฆฌ์ฆ์ ์ ์ฉํ๋ ๋ฌธ์ ์ค ํ๋๋ก ๊ทธ๋ํ ๋ฌธ์ ๊ฐ ์๋ค๋ ๊ฒ์ด๋ค.
- ์์ฐจ ํ์ : ์ ํ ๊ตฌ์กฐ๋ฅผ ์ ์ฒด์ ์ผ๋ก ํ์
- ๊น์ด ์ฐ์ ํ์ (DFS) : ๋น์ ํ ๊ตฌ์กฐ์์ ๊น์ด๋ฅผ ์ฐ์ ํ์ฌ ์ ์ฒด์ ์ผ๋ก ํ์
- ๋๋น ์ฐ์ ํ์ (BFS) : ๋น์ ํ ๊ตฌ์กฐ์์ ๋๋น๋ฅผ ์ฐ์ ํ์ฌ ์ ์ฒด์ ์ผ๋ก ํ์
๐ก ํ ๋ฒ ๋ ์ ๋ฆฌ !@#$~!!! ๋ธ๋ฃจํธํฌ์ค ์๊ณ ๋ฆฌ์ฆ์ ์ข ๋ฅ๊ฐ ์์ฐจ ํ์, DFS, BFS์ธ ๊ฒ์ด ์๋๋ผ ๊ทธ์ ๋ธ๋ฃจํธํฌ์ค ์๊ณ ๋ฆฌ์ฆ์ ๊ตฌํํ๋ ๋ฐ ์ฌ์ฉ๋๋ ๋ํ์ ์ธ ๋ฐฉ๋ฒ๋ค ์ค ์ผ๋ถ๋ผ๋ ๊ฒ !! ์ฆ, DFS๋ ๋ธ๋ฃจํธํฌ์ค ์๊ณ ๋ฆฌ์ฆ์ด๋ผ๊ณ ํ ์ ์์ง๋ง, ๋ธ๋ฃจํธํฌ์ค ์๊ณ ๋ฆฌ์ฆ์ DFS๊ฐ ์๋๋ค.!!
๋ฐฑํธ๋ํน ์๊ณ ๋ฆฌ์ฆ์ ํน์ง
๐ ์ ๊น ๋ธ๋ฃจํธํฌ์ค ์๊ณ ๋ฆฌ์ฆ์ ๊น์ด ๋น ์ ธ๋ฒ๋ ธ์ง๋ง, ๋ค์ ๋์์ ์ฒ์ ๊ฐ์ก๋ ์๋ฌธ !! ๋ฐฑํธ๋ํน์ด๋ ๋ธ๋ฃจํธํฌ์ค์ ์ฐจ์ด์ !!....์ด ๊ถ๊ธํ๋๋ฐ ๊ธ์ ์ ๋ฆฌํ๋ค ๋ณด๋ ๊ทธ๋ฅ ์ ์ด์ ๊ฐ๋ ๋ถํฐ ๋ค๋ฅด์์ ใ ํใ ใ ๊ทธ์น๋ง,, ๋ฐฑํธ๋ํน๋ง์ ํน์ง์ ์จ๋ณด๊ฒ ์ด๋ค ใ ใ ใ
ํ์ ๊ณผ์ ์์ ๋ถํ์ํ ๊ฒฝ์ฐ๋ฅผ ๋ฐฐ์ ํ์ฌ ์คํ ์๊ฐ์ ๋จ์ถ์ํจ๋ค. ์กฐ๊ฑด์ ๋ง์กฑํ์ง ์๋ ๊ฒฝ์ฐ์๋ ์ด์ ๋จ๊ณ๋ก ๋์๊ฐ ๋ค์ ๊ฒฝ์ฐ๋ฅผ ์๋ํ์ฌ ์ต์ ์ ํด๋ฅผ ์ฐพ๋๋ค. ์๊ฐ ๋จ์ถ์ ์ํด(=๊ฐ๋ฅํ ๊ฒฝ์ฐ์ ์๋ฅผ ์ค์ด๊ธฐ ์ํด) ๊ฐ์ง์น๊ธฐ(Pruning) ๊ธฐ๋ฒ์ ์ฌ์ฉํ๋ค. ์ฆ, ๊ฐ์ง์น๊ธฐ๋ฅผ ํตํด ์คํ์๊ฐ์ ์ต์ ํํ ์ ์๋ค.
๋ฐฑํธ๋ํน ์๊ณ ๋ฆฌ์ฆ์ ๋ณดํต ๊น์ด ์ฐ์ ํ์์ ์ฌ์ฉํ๋ค. ๊ทธ๋ฆฌ๊ณ ์ผ๋ฐ์ ์ผ๋ก ์ฌ๊ท์ ์ธ ๋ฐฉ์์ผ๋ก ๊ตฌํ๋๋ค. ์ฌ๊ท ํธ์ถ์ ํตํด ๋ค์ ์ํ๋ก ์งํํ๊ณ , ๊ฒฐ๊ณผ๋ฅผ ํ์ธํ ํ ๋ค์ ์ด์ ์ํ๋ก ๋์๊ฐ๋ ๊ณผ์ ์ ๋ฐ๋ณตํ๋ค.
(๋ธ๋ฃจํธํฌ์ค๋ ๋ชจ๋ ๊ฐ๋ฅํ ์กฐํฉ์ ํ์ํ๊ธฐ ๋๋ฌธ์ ์ผ๋ฐ์ ์ผ๋ก ์์ ์ ๋ ฅ ํฌ๊ธฐ์ ๋ํด์๋ง ํจ์จ์ ์ผ๋ก ๋์.)
๊ฐ์ง์น๊ธฐ(Pruning) ๊ธฐ๋ฒ
์ฌ๊ธฐ์ ๊ฐ์ง์น๊ธฐ(Pruning) ๊ธฐ๋ฒ์ด ์ ํํ ๋ฌด์์ด๋ !? ์ด๋ป๊ฒ ๋ฌธ์ ์ ์ ์ฉ๋๋ ๊ฒ์ด๋ ? N-Queen ๋ฌธ์ ๋ฅผ ์๋ก ๋ค์ด ๋ณด์.
N-Queen ๋ฌธ์ ๋ N x N ํฌ๊ธฐ์ ์ฒด์คํ์ N๊ฐ์ ํธ์ ์๋ก ๊ณต๊ฒฉํ ์ ์๊ฒ ๋๋๋ก ํด์ผ ํ๋ค. ์ฌ๊ธฐ์ ๋ฐฑํธ๋ํน ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํ์ฌ ๊ฐ๋ฅํ ๋ชจ๋ ํธ์ ๋ฐฐ์น๋ฅผ ํ์ํ ์ ์๋ค.
๊ฐ์ง์น๊ธฐ๋ฅผ ์ ์ฉํ์ฌ ์ ๋งํ์ง ์์ ๊ฒฝ์ฐ๋ฅผ ๋ฐฐ์ ํ๋ ์์๋ ๋ค์ 3๊ฐ์ง๊ฐ ์๋ค.
- ํ ํ์๋ ํ๋์ ํธ๋ง ์์นํ ์ ์์ผ๋ฏ๋ก, ํน์ ํ์ ์ด๋ฏธ ํธ์ด ๋ฐฐ์น๋์ด ์๋ค๋ฉด ๋ค์ ํ์ผ๋ก ๋์ด๊ฐ๋ค.
- ๊ฐ์ ์ด์๋ 2๊ฐ ์ด์์ ํธ์ด ์์นํ ์ ์์ผ๋ฏ๋ก, ํน์ ์ด์ ์ด๋ฏธ ํธ์ด ๋ฐฐ์น๋์ด ์๋ค๋ฉด ๋ค์ ์ด๋ก ๋์ด๊ฐ๋ค.
- ๋๊ฐ์ ๋ฐฉํฅ์ผ๋ก ํธ์ด ๊ณต๊ฒฉํ ์ ์์ผ๋ฏ๋ก, ๋๊ฐ์ ๋ฐฉํฅ์ ๋ค๋ฅธ ํธ์ด ์ด๋ฏธ ๋ฐฐ์น๋์ด ์๋ค๋ฉด ๋ค์ ์์น๋ก ๋์ด๊ฐ๋ค.
์ 3๊ฐ์ง ๊ฐ์ง(?)๋ฅผ ์นจ์ผ๋ก์จ ๋ถํ์ํ ํธ์ ๋ฐฐ์น๋ฅผ ์ฌ์ ์ ๋ฐฐ์ ํ์ฌ ํ์ ๊ณผ์ ์ ํจ์จ์ ์ผ๋ก ์งํํ ์ ์๋ ๊ฒ !!
์ ์ฝ ์กฐ๊ฑด๊ณผ ๊ฐ์ง์น๊ธฐ ๐
โ๏ธ ์ ์ฝ ์กฐ๊ฑด(Constraint)์ ๋ฌธ์ ์ ์กฐ๊ฑด์ด๋ ์ ์ฝ ์ฌํญ์ ๋ํ๋ด๋ ๊ฒ์ด๋ค. ์ผ๋ฐ์ ์ผ๋ก ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ๋ง์กฑํด์ผ ํ๋ ์กฐ๊ฑด๋ค์ ๋งํจ ! N-Queen ๋ฌธ์ ์์๋ "ํธ๋ค์ ์๋ก ๊ณต๊ฒฉํ ์ ์์ด์ผ ํ๋ค." ๋ผ๋ ์กฐ๊ฑด์ด ์ด ๋ฌธ์ ์ ์ ์ฝ ์กฐ๊ฑด์ด๋ค. ์ฐ๋ฆฌ๋ ์ด ์ ์ฝ ์กฐ๊ฑด์ ๋ง์กฑ์ํค๊ธฐ ์ํด ์๊ณ ๋ฆฌ์ฆ์ ์ค๊ณํ๋ ๊ฒ์ ! ์ฆ, ๊ตฌํํ ๋ ๊ผญ ๊ณ ๋ คํด์ผ ํจ.
โ๏ธ ๊ฐ์ง์น๊ธฐ(Pruning)๋ ํ์ ๊ณผ์ ์์ ์ ๋งํ์ง ์์, ์ ๋ต์ ๋์ถํ๋ ๋ฐ์ ํ์ ์๋ ๊ฒฝ์ฐ์ ์๋ฅผ ๋ฐฐ์ ํ์ฌ ํ์ ๋ฒ์๋ฅผ ์ค์ด๋ ๊ฒ์ด๋ค. ์ฆ, ์์ ๋งํ 3๊ฐ์ง ์์๊ฐ ์ฌ์ ์ ๋ฐฐ์ ํ๋ ๊ฐ์ง์น๊ธฐ๋ผ๊ณ ํ ์ ์๋ ๊ฒ์ด๋ค. ์๊ณ ๋ฆฌ์ฆ์ ํจ์จ์ฑ ํฅ์์ด ๋ชฉ์ ์ !
์ ์ฝ ์กฐ๊ฑด์ ํด๋น ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ๋ฐ๋์ ๊ณ ๋ คํด์ผ ํ๋ ์ฌํญ์ด๋ฉฐ, ๊ฐ์ง์น๊ธฐ๋ ์คํ ์๊ฐ์ ์ค์ด๊ธฐ ์ํด ์ฌ์ฉ๋๋ ๋ฐฑํธ๋ํน์ ๊ธฐ๋ฒ ์ค ํ๋์ธ ๊ฒ์ด๋ค ~ ๊ฐ์ง์น๊ธฐ๋ ๊ฐ์ง๋ค์ "๋ด"๊ฐ ๋์ถํด๋ด์ผ ํ๋ค๋ ๊ฒ ใ ใ ใ
์ด๋ฆฌ์ ๋ฆฌ ๊ธ์ด ๊ธธ์ด์ก๋ค ๐ซ
๊ฐ๋ ๋ง ๊ฐ๋จํ ์ ๋ฆฌํ๋ ค ํ๋๋ฐ
๊ณต๋ถํ๊ณ ์ ๋ฆฌํ๋ ๊ณผ์ ์ ํท๊ฐ๋ฆฌ๋ ๊ฒ ๊ณ์ ํ์๋์ด์ ๋ฐ์ํจ ใ ใ ใ
์ ๋ฆฌํ๊ณ ๋ณด๋ ๋น์ฐํ ๊ฑฐ์๋ค ? ๋จธ์ฅ ;;
์ด์ ๋ฐฑํธ๋ํน ๋ฌธ์ ํ๋ฌ ๊ฐ์ผ์ง ๐
'Algorithm' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Algorithm/Swift] ๊น์ด ์ฐ์ ํ์ (DFS) (0) | 2023.06.03 |
---|---|
[Algorithm/Swift] ๋์ ๊ณํ๋ฒ(DP) (1) | 2023.05.16 |