N Queens problem
๋ฌธ์
์ํ์ข์ฐ ๋๊ฐ์ ๊น์ง ์ด๋ํ ์ ์๋ ๋ง์ธ ํธ์ ์ฒด์คํ์ ๋๋ค๊ณ ํ์. N๊ฐ์ ํธ์ด ์ฒด์คํ์์ ์๋ก ๊ณต์กดํ๊ธฐ ์ํด์ ๋์ ์ ์๋ ๋ฐฉ๋ฒ์ ๋งํด๋ผ.
ํ์ด
ํํธ
๋์ถ์ ๊ธฐ๋ฒ Back Tracking
๋ฌธ์ ๋ฅผ ํ๋ค๊ฐ ๋ง๋ค๋ฅธ ๊ธธ์ ๋ค๋ค๋ฅผ ๋, ๊ฐ์ฅ ์ต๊ทผ์ ํ๋ ๊ฒฐ์ ์ ๋ฒ๋ณตํ๋ฉฐ ๋ค์ ํ์ด๊ฐ๋ ๋ฐฉ๋ฒ
์ํ๊ณต๊ฐํธ๋ฆฌ๋ฅผ ๊น์ด ์ฐ์ ์ ์ผ๋ก ํ์ํ์ฌ ํด๋ฅผ ์ฐพ๋ ์๊ณ ๋ฆฌ์ฆ
์ํ๊ณต๊ฐํธ๋ฆฌ : ์ฐพ๋ ํด๋ฅผ ๋ฐ๋์ ํฌํจํ๋ ํธ๋ฆฌ
ํด๊ฐ ์กด์ฌํ๋ค๋ฉด, ๋ฐ๋์ ํธ๋ฆฌ ๋ด๋ถ์ ๋ ธ๋๋ก ์กด์ฌํ๋ค๋ ๊ฒ. ํธ๋ฆฌ๋ฅผ ์ฒด๊ณ์ ์ผ๋ก ํ์ํ๋ฉด ํด๋ฅผ ๊ตฌํ ์ ์๋ค.
back tracking ์๊ณ ๋ฆฌ์ฆ์ ๊ตฌํํ๋ ๋ ๊ฐ์ง ๋ฐฉ๋ฒ
recursion ์ ์ด์ฉํ๋ ๋ฐฉ๋ฒ : ๊ฐ์ฅ ๊ฐ๋จํ๊ณ ๋ช ๋ฃํ๋ค.
stack ์๋ฃ๊ตฌ์กฐ๋ฅผ ์ด์ฉํ๋ ๋ฐฉ๋ฒ
ํ์ด
์ํ๊ณต๊ฐํธ๋ฆฌ๋ฅผ ํ์ฉํ ๋ฐฑํธ๋ํน ๊ธฐ๋ฒ์ ์ฌ์ฉํ๋ค. ์ํ๊ณต๊ฐํธ๋ฆฌ ๋ด๋ถ์ ๋ฐ๋์ ๋ต์ด ์กด์ฌํ๋ค.
์ฌ๊ทํจ์๋ฅผ ํธ์ถํ๋ ๊ฒ์ ์ด ์ํ๊ณต๊ฐํธ๋ฆฌ์ ๋ ธ๋์ ๋์ฐฉํ ๊ฒ์ผ๋ก ์๊ฐ์ ํด๋ณธ๋ค. ์ด๋, ๋ ธ๋์ ๋์ฐฉํ๊ณ ๋์ ๊ฐ์ฅ ๋จผ์ ํด์ผํ ๊ฒ์ ํด๋น ๋ ธ๋๊ฐ ๋ ๊น๊ฒ ๋ค์ด๊ฐ๋ณผ ํ์๊ฐ ์๋์ง ์๋์ง๋ฅผ ์ฒดํฌํ๋ ๊ฒ์ด๋ค. ๋ง์ฝ์ ์ด๋ฏธ ๋ค๋ฅธ ๋ ธ๋์์ ๋น๊ต์์ ์ถฉ๋ํ๋ค๋ฉด, ๋ ๊น๊ฒ ๋ค์ด๊ฐ๋ณผ ํ์๋ ์๋ ๊ฒ์ด๋ฏ๋ก ๋ค์์ผ๋ก ๋์ด๊ฐ๋ฉด ๋๋ค.
์ ์ฉํ ์๊ณ ๋ฆฌ์ฆ์ ์ ๋ฆฌํด๋ณด๋ฉด ๋ค์๊ณผ ๊ฐ์ ํ๋ฆ์ ์ง๋๋ค.
์์ ์ํ๊ณต๊ฐํธ๋ฆฌ์์ level ์ ํ์ฌ๋ ธ๋, 1๋ฒ์์ level ๊น์ง ์ด๋ป๊ฒ ๋ง์ด ๋์๋์ง๋ ๋ฐฐ์ด๋ก ํํํ๋ค๊ณ ํด๋ณด์.
cols[i] = j ์ ๊ฒฝ์ฐ, i๋ฒ์งธ ๋ง์ด j๋ฒ์งธ์ ๋์๋ค๋ ๊ฒ์ ์๋ฏธํ๋ค.
์ถฉ๋์ ์กฐ๊ฑด์ ์ ์ํ๋ค.
1) ๊ฐ์ ๋ ธ๋ ๋ฒํธ๋ฅผ ๊ฐ์ง ๋
์ด์ฐจํผ ๊ฐ ๋ ๋ฒจ์์ ํ๋์ ๋ ธ๋๋ง ๋์ ์ ์๊ธฐ ๋๋ฌธ์ ๋ ๋ฒจ ๋ด๋ถ์์๋ ์๊ฐํ์ง ์์๋ ๋๋ค.
๊ฐ์ column ์ ์์นํ ๋ = ๋ ธ๋์ ๊ฐ์ด ๊ฐ๋ค.
2) ๋๊ฐ์ ์์์ ๋ง์ฃผ์น ๋
ํ๋์ ๋ฐฐ์ด int[] a ์ a[level] = node ํํ๋ก ์ ์ฅ๋๋ค๊ณ ์๊ฐํ๋ฉด, ์ด์ level ์ธ i์ ๋ํด ์๋์ ๊ฐ์ ์์ด ์ฑ๋ฆฝํ๋ค.
level - i = | a[i] - a[level] |
๋ ๋ ธ๋ ์ค ์ด๋๊ฒ์ด ๋ ์์์๋์ง ๋ชจ๋ฅด๊ธฐ ๋๋ฌธ์ ์ ๋๊ฐ์ ๊ตฌํด์ผํ๋ค.
์ถฉ๋์ ์กฐ๊ฑด์ ํต๊ณผํ ๊ฒฝ์ฐ true, ํต๊ณผ ๋ชปํ ๊ฒฝ์ฐ false ๋ฅผ ๋ฐํํ๋ค.
level = N ์ธ ๊ฒฝ์ฐ, ๋ชจ๋ ๋ง์ด ๋์๋ค๋ ์๋ฏธ์ด๋ฏ๋ก true ๋ฅผ ๋ฐํํ๋ค. ์ต์ข ์ฑ๊ณต!
๊ทธ ์ด์ธ์ ๊ฒฝ์ฐ๋ 1๋ถํฐ N๊น์ง ์ํํ๋ฉฐ level+1 ๋ฒ์งธ ํ์ ๋ง์ ๋์ ๋ค, ์์ ์กฐ๊ฑด์ ๊ฒ์ํ๊ธฐ ์ํด recursion ์ ํธ์ถํ๋ค. recursion ์์ true ๋ฅผ ๋ฐํํ๋ฉด, true ๋ฅผ, ์๋ ๊ฒฝ์ฐ, false ๋ฅผ ๋ฐํํ๋ค.
Last updated