์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œ/BOJ_Python

[BOJ/Step14] 9663 : N-Queen (Python)

NaNaRin๐Ÿ™ƒ 2021. 2. 20. 16:12

www.acmicpc.net/problem/9663

 

9663๋ฒˆ: N-Queen

N-Queen ๋ฌธ์ œ๋Š” ํฌ๊ธฐ๊ฐ€ N × N์ธ ์ฒด์ŠคํŒ ์œ„์— ํ€ธ N๊ฐœ๋ฅผ ์„œ๋กœ ๊ณต๊ฒฉํ•  ์ˆ˜ ์—†๊ฒŒ ๋†“๋Š” ๋ฌธ์ œ์ด๋‹ค. N์ด ์ฃผ์–ด์กŒ์„ ๋•Œ, ํ€ธ์„ ๋†“๋Š” ๋ฐฉ๋ฒ•์˜ ์ˆ˜๋ฅผ ๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.

www.acmicpc.net


ํ€ธ์ด ์„œ๋กœ๋ฅผ ๊ณต๊ฒฉํ•  ์ˆ˜ ์—†๊ธฐ ์œ„ํ•ด์„œ๋Š” ํ•œ ์—ด์— ํ•˜๋‚˜์˜ ํ€ธ, ํ•œ ํ–‰์— ํ•˜๋‚˜์˜ ํ€ธ, ํ•œ ๋Œ€๊ฐ์„ ์— ํ•˜๋‚˜์˜ ํ€ธ๋งŒ ์กด์žฌํ•ด์•ผ ํ•œ๋‹ค.

๊ฐ ํ€ธ์˜ ์œ„์น˜๋ฅผ ์ €์žฅํ•  row

๊ฐ ์นผ๋Ÿผ์— ํ€ธ์ด ์žˆ๋Š”์ง€ ํ™•์ธํ•  column ํฌ๊ธฐ n

๊ฐ ๋Œ€๊ฐ์„ ์— ํ€ธ์ด ์žˆ๋Š”์ง€ ํ™•์ธํ•  leri, rile ํฌ๊ธฐ 2*n-1

# 9663.py

n = int(input())

row = [0] * n
column = [False] * n
leri = [False] * (2 * n - 1)
rile = [False] * (2 * n - 1)
cnt = []


def setQueen(i):
    for j in range(n):
        if not column[j] and not leri[i + j] and not rile[i - j + n - 1]:
            row[i] = j
            if i == n - 1:
                cnt.append(row)
            else:
                column[j] = leri[i + j] = rile[i - j + n - 1] = True
                setQueen(i + 1)
                column[j] = leri[i + j] = rile[i - j + n - 1] = False


setQueen(0)
print(len(cnt))

์ž˜ ๋‚˜์˜ค๋Š”๋ฐ ์‹œ๊ฐ„์ดˆ๊ณผ...

ํŒŒ์ด์ฌ์€ ๋ฐฑํŠธ๋ž˜ํ‚น ์‹œ๊ฐ„ ๋„ˆ๋ฌด ์˜ค๋ž˜ ๊ฑธ๋ ค์„œ ๊ถŒ์žฅํ•˜์ง€ ์•Š๋Š”๋‹ค๋„ค...ใ…œ

์ผ๋‹จ์€ ๋‚ด ์ž˜๋ชป์ด ์•„๋‹ˆ๋ผ๊ณ  ์ƒ๊ฐํ•˜๊ณ  ๋„˜์–ด๊ฐ„๋‹ค ใ…Ž

answer = [0, 1, 0, 0, 2, 10, 4, 40, 92, 352, 724, 2680, 14200, 73712, 365596]
print(answer[int(input())])

์ด๋ ‡๊ฒŒ ํ†ต๊ณผํ•จ

 

 

์™€ ๋ญ์ง€ ๋˜‘๊ฐ™์€ ์ฝ”๋“œ PyPy3์œผ๋กœ ๋Œ๋ฆฌ๋‹ˆ๊นŒ ๋งž์•˜๋‹ค

PyPy๊ฐ€ ๋Œ€์ฒด ๋ญ˜๊นŒ.. ์–ด๋ ต๋‹ค...