1년 전부터 내 머리를 아프게 하였던 문제 ...
파이썬으로 풀면 시간 초과를 피하기 힘들다. 파이파이로 제출하자
import sys
input = sys.stdin.readline
# 퀸을 놓을 수 있는지 체크
def check(r):
# 세로 체크
for i in range(r):
if row[r] == row[i]:
return False
# 대각 체크
if abs(row[r]-row[i]) == abs(r-i):
return False
return True
# DFS
def dfs(start):
global answer
# 행이 마지막 행이면 모든 퀸을 놓을 수 있으므로 개수 추가
if start == n:
answer += 1
else:
for i in range(n):
row[start] = i
if check(start):
dfs(start+1)
n = int(input())
answer = 0
row = [0]*n
dfs(0)
print(answer)