출처: 백준 9663번 N-Queen
문제에 적혀있는 힌트는 문제와 큰 상관없는 제출자의 조크 같습니다.
퀸을 서로 공격할 수 없게 체스판에 둘려면, 2가지 조건을 만족해야 한다.
리스트를 하나 생성하고, 각 인덱스를 행을 표시하는 것으로, 들어있는 값을 열을 표시하는 것으로 사용한다.
1번 조건은 리스트에 들어있는 값들을 비교하면 된다.
2번 조건은 인덱스 간의 차이가 리스트에 들어있는 값들의 차이와 같은지 비교하면 된다.
Python 3
로 제출할 경우, 시간 초과가 되니PyPy3
로 제출해야 한다.
num = int(input())
count = 0
chess = []
def check(n):
for i in range(n):
if (chess[n] == chess[i]) or (abs(chess[n] - chess[i]) == n-i):
return False
return True
def queen(n):
global count
if n==num:
count += 1
return
for i in range(num):
chess.append(i)
if check(n):
queen(n+1)
chess.pop()
queen(0)
print(count)