์๋ฃ๊ตฌ์กฐ/๐์๊ณ ๋ฆฌ์ฆ - 29
์ค๋ ๋ค์ ๊ฐ์ ๋ชฉ๋ก
- ๋ฐฑํธ๋ํน - N queen(1)
- ๋ฐฑํธ๋ํน - N queen(2)
- ๋ฐฑํธ๋ํน - N queen(3)
- ์๋ฃ๊ตฌ์กฐ, ์๊ณ ๋ฆฌ์ฆ ์ ๋ฆฌ
N queen
๋ํ์ ์ธ ๋ฐฑํธ๋ํน ๋ฌธ์ ์ค ํ๋๋ค.
ํ์ ๋ ์ฒด์คํ์ N๊ฐ์ ํธ์ ์ต๋๋ก ๋ฐฐ์นํ๋ ๋ฌธ์
- ์ด์ ํธ๋ค์ด ์ด๋ํ ์ ์๋ ๊ณต๊ฐ์ ํธ์ ๋ฐฐ์นํ๋ค
- ๋ฐฐ์นํ๋ ๋์ค์ ํธ์ ๋ ์ด์ ๋์ ์ ์๋ค๋ฉด,
๋ ์ด์ ๋ค์ ํ์ผ๋ก ๋์ด๊ฐ์ง ์๊ณ ,
์ด์ ํ์ ํธ์ ์์น๋ฅผ ์ด๋์ํจ๋ค.
N queen ๊ตฌํ
def dfs(N, curRow, curList, result):
if N == curRow:
result.append(curList[:])
return
for curCol in range(N):
check = True
for row in range(curRow):
if curList[row] == curCol or curRow-row == abs(curList[row] - curCol):
check = False
if check:
curList.append(curCol)
dfs(N, curRow + 1, curList, result)
curList.pop()
result = []
dfs(4, 0, [], result)
print(result)
ํ์ค์ฉ ๋ด๋ ค๊ฐ๋ฉด์ ๊ฐ ํ์ ํธ์ ๋๊ณ ,
๋ค์ ํ์ ํธ์ ๋์ ์ ์๋ ์๋ฆฌ์ ํธ์ ๋๊ณ ,
๋ค์ ํ์ ํน์ ์ด์ ํธ์ ๋์ ์ ์๋์ง ์ฌ๋ถ๋ฅผ ํ๋จํด ๊ฑด๋๋ฐ๋๋ก ๊ตฌํํ๋ค.
๊ฐ์ง์น๊ธฐ
๊ฐ์ง์น๊ธฐ๋ ํน์ ์ด์ ํธ์ ๋์ ์ ์๋ ๊ฒฝ์ฐ ์งํ๋์๋ค.
ํน์ ์ด์ ํธ์ ๋์ ์ ์๋ ๊ฒฝ์ฐ ์์์ผ๋ก ๊ตฌ์ฑ๋ ์ํ ๊ณต๊ฐ ํธ๋ฆฌ์์ ํด๋ฅผ ๊ตฌํ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค.
์ด ๊ทธ๋ฆผ์์ (1,0), (1,1), (1,2)๋ ํธ์ ๋์ ์ ์๊ธฐ ๋๋ฌธ์,
์ด ์์น์ ํธ์ ๋๋ ์ํ ๊ณต๊ฐ ํธ๋ฆฌ์๋ ํด๊ฐ ์กด์ฌํ์ง ์์ ๊ฐ์ง์น๊ธฐ๋ฅผ ํตํด ๊ฑด๋๋ฐ์๋ค.
์ด ์ฒ๋ผ ๊ฐ์ง์น๊ธฐ๋ฅผ ํ๊ธฐ ์ํด์๋ ํธ์ ๋์์๋, ๊ฒฝ๋ก๊ฐ ๊ฒน์น๋์ง ์ฌ๋ถ๋ฅผ ํ๋จํด์ผํ๋ค.
์ด๋ฅผ ํ๋จํ๊ธฐ ์ํด์๋ ์์ง๊ณผ, ๋๊ฐ์ ์ด ๊ฒน์น๋์ง๋ง ํ์ธํ๋ฉด ๋๋ค.
(์ํ์ ๋งค๋ฒ ํ ํ์ฉ ๋ด๋ ค๊ฐ์ ๊ฒน์น์ง ์์)
์์ง์ curList[row] == curCol
๋๊ฐ์ ์ curRow-row == abs(curList[row] - curCol)
์ด๋ ๊ฒ ํ๋จํ ์ ์๋ค.
์๋ฃ๊ตฌ์กฐ ์ ๋ฆฌ
๋ฐฐ์ด, ํ, ์คํ, ์ฐ๊ฒฐ๋ฆฌ์คํธ, ํด์ฌํ ์ด๋ธ, ํธ๋ฆฌ, BST, ํ
์๊ณ ๋ฆฌ์ฆ ์ ๋ฆฌ
๋ฒ๋ธ, ์ ํ, ์ฝ์
, ๋ณํฉ, ํต (์ ๋ ฌ)
์ฌ๊ท ํธ์ถ, ๋์ ๊ณํ๋ฒ(DP), ๋ถํ ์ ๋ณต, ํ์ ์๊ณ ๋ฆฌ์ฆ, ๋ฐฑํธ๋ํน
์์ฐจ ํ์, ์ด์งํ์
bfs, dfs, ๋ค์ต์คํธ๋ผ ์๊ณ ๋ฆฌ์ฆ, ํฌ๋ฃจ์ค์นผ, ํ๋ฆผ ์๊ณ ๋ฆฌ์ฆ (๊ทธ๋ํ)
๋ง์ง๋ง
์ฌ๊ธฐ๊น์ง๊ฐ ์๋ฃ๊ตฌ์กฐ/์๊ณ ๋ฆฌ์ฆ ํํธ์๊ณ ,
๋ค์๋ถํฐ๋ ์ ํ๋ณ ๋ฌธ์ ํ์ด ํํธ๋ค.
๋๊ธ๋จ๊ธฐ๊ธฐ