N-Queen
'''
https://programmers.co.kr/learn/courses/30/lessons/12952
N-Queen
[ํ์ด]
1. stack์ ๋ค์๊ณผ ๊ฐ์ ์์๋ฅผ ์ง์ด๋ฃ๋๋ค
{0} : story, ๋ช๋ฒ์งธ ๊ฐ๋ก์ค์ธ์ง.
=> ์ด๊ธฐ์ ์ฒซ๋ฒ์งธ ๊ฐ๋ก์ค๋ก ์ด๊ธฐํ. ์์์๋ถํฐ ์์.
{1} : hor, ๋ช๋ฒ์งธ ์ธ๋ก์ค์ ๊ณ ๋ฅผ ์ ์๋์ง.
=> ์ด์ ์ ๊ณ ๋ฅธ ์ธ๋ก์ค์ ๊ณ ๋ฅด์ง ๋ชปํ๋ฏ๋ก ํ๋์ฉ ์์ด์ง๋ค.
=> ์ ํํ ์ธ๋ก์ค์ ์์ ๊ธฐ ์ํด set ์๋ฃํ ์ ํ
{2, 3} : diag1, diag2, ๋๊ฐ์ ๊ฒ์ฌ
=> ๊ฐ์ฅ ์ผ์ชฝ ์๋ฅผ (1, 1) ์ด๋ผ๊ณ ํ๋ฉด
=> ๊ธฐ์ธ๊ธฐ๊ฐ -1 ์ธ ๋๊ฐ์ ๋ค์ ๊ณตํต์ ์ ๋ ์ขํ์ ์ฐจ๊ฐ ์ผ์ ํ๋ค๋ ๊ฒ => diag1
=> ๊ธฐ์ธ๊ธฐ๊ฐ 1์ธ ๋๊ฐ์ ๋ค์ ๊ณตํต์ ์ ๋ ์ขํ์ ํฉ์ด ์ผ์ ํ๋ค๋ ๊ฒ => diag2
2. dfs ๋ฐฉ์์ผ๋ก ์กฐ๊ฑด์ ๋ง์กฑํ ๋ ๋ง๋ค ๊ฐ๋ก ์ธต์ ์ฆ๊ฐ์ํค๋ฉฐ ํ์ํ๋ค.
=> bfs ๋ฐฉ์์ด์ด๋ ํฐ ์๊ด์ ์์
'''
def solution(n):
answer = 0
stack = [[1, set(range(1, n + 1)), [], []]]
while stack:
story, hor, diag1, diag2 = stack.pop()
if story == n + 1:
answer += 1
continue
for x in hor:
if x - story not in diag1 and x + story not in diag2:
stack.append([story + 1, hor - set([x]), diag1 + [x - story], diag2 + [x + story]])
return answer
'''
๋ฏธ์น ํ์ด
nQueen = [0, 1, 0, 0, 2, 10, 4, 40, 92, 352, 724, 2680, 14200, 73712, 365596, 2279184, 14772512, 95815104, 666090624, 4968057848, 39029188884, 314666222712, 2691008701644, 24233937684440, 227514171973736, 2207893435808352, 22317699616364044, 234907967154122528].__getitem__
'''
Last updated
Was this helpful?