N Queeen
문제 링크 https://solved.ac/problems/tags/backtracking?sort=solved&direction=desc&page=1 (opens in a new tab)
풀이
풀이 방법의 기본적인 개념은 row[i] = j
라면 퀸을 i행 j열에 놓는다는 것이다.
n = int(input())
ans = 0
row = [0] * n
def is_promising(x):
for i in range(x):
'''
row[x] = 1 row[i] = 1 이라면 둘 다 각자의 행에 1열에 놓았으므로 이는 잘못된 경우가 된다.
대각선거리는 떨어진 행의 거리만큼 열이 멀다면 대각선상에 존재하는 것이다.
만약 1행의 2열에 퀸이 있고 3행에서 지워져야 할 대각선 거리는 3 - 1 = 2, 2 + 2 = 4 즉 3행의 4열은 1행 2열의 대각선이 된다.
'''
if row[x] == row[i] or abs(row[x] - row[i]) == abs(x - i):
return False
return True
def n_queens(x):
global ans
if x == n:
ans += 1
return
else:
for i in range(n):
row[x] = i
if is_promising(x):
n_queens(x + 1)
n_queens(0)
print(ans)