๐๏ธ Algorithm/๐ฉ ๋ฐฑ์ค
๐ฉ [๋ฐฑ์ค] [Python] [Gold4] 9663๋ฒ_N-Queen
Dbswnstjd
2023. 4. 15. 20:03
๋ฌธ์
https://www.acmicpc.net/problem/9663
9663๋ฒ: N-Queen
N-Queen ๋ฌธ์ ๋ ํฌ๊ธฐ๊ฐ N × N์ธ ์ฒด์คํ ์์ ํธ N๊ฐ๋ฅผ ์๋ก ๊ณต๊ฒฉํ ์ ์๊ฒ ๋๋ ๋ฌธ์ ์ด๋ค. N์ด ์ฃผ์ด์ก์ ๋, ํธ์ ๋๋ ๋ฐฉ๋ฒ์ ์๋ฅผ ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
www.acmicpc.net
ํ์ด
# ๋ฐฑ์ค 9663๋ฒ ๋ฌธ์ - N-Queen
import sys
input = sys.stdin.readline
n = int(input().rstrip())
answer = 0
row = [0] * n
def is_promising(x):
for i in range(x):
if row[x] == row[i] or abs(row[x]-row[i]) == abs(x-i):
return False
return True
def n_queens(x):
global answer
if x == n:
answer += 1
else:
for i in range(n):
row[x] = i
if is_promising(x):
n_queens(x+1)
n_queens(0)
print(answer)
์ด ๋ฐฉ์์ผ๋ก ํ๋ฉด ์๊ฐ์ด๊ณผ๊ฐ ๋ฐ์ํด์ pypy3๋ก ์ ์ถํด์ผ ํ๋ค.
๊ทธ๋์ visited๋ฅผ ๋ง๋ค์ด์ ์ ์ถํ๋๋ฐ๋ ์๊ฐ์ด๊ณผ์ด๋ค..
import sys
input = sys.stdin.readline
def check(x):
for i in range(x):
if rows[x] == rows[i] or abs(rows[x] - rows[i]) == x - i:
return False
return True
def dfs(x):
global cnt
if x == n:
cnt += 1
return
for i in range(n):
if visited[i]:
continue
rows[x] = i
if check(x):
visited[i] = True
dfs(x+1)
visited[i] = False
n = int(input())
rows = [0] * n
visited = [False] * n
cnt = 0
dfs(0)
print(cnt)
๋ฐฑํธ๋ํน ๋ฌธ์ ๋ ์ฒ์์ด์ด์ ์ดํดํ๋๋ฐ ๋๋ฌด ์ด๋ ค์ด ๋ฌธ์ ์๋ค.