https://www.acmicpc.net/problem/9663

N-Queen 문제는 크기가 N × N인 체스판 위에 퀸 N개를 서로 공격할 수 없게 놓는 문제이다.
N이 주어졌을 때, 퀸을 놓는 방법의 수를 구하는 프로그램을 작성하시오.
첫째 줄에 N이 주어진다. (1 ≤ N < 15)
첫째 줄에 퀸 N개를 서로 공격할 수 없게 놓는 경우의 수를 출력한다.
8
92
N과 M시리즈를 풀면서 백트래킹을 공부하다가 문제 풀이 방법이 신기해서 풀게 됐다.
우선 퀸이 같은 열에 위치하면 안되고 대각선으로 위치해도 안된다.
1) 같은 열인지 확인
2) 왼쪽 대각선에 있는지 확인
3) 오른쪽 대각선에 있는지 확인
이 세가지 경우만 따로 배열 만들어서 처리하면 된다.



출처 : 바킹독님
접근 방법이 신기해서 나중에 다시 한 번 풀어봐야겠다.
import sys
input = sys.stdin.readline
n = int(input())
isUsed1 = [False]*n # 열
isUsed2 = [False]*(n+n-1) # 왼쪽 아래로 대각선
isUsed3 = [False]*(n+n-1) # 오른쪽 아래로 대각선
cnt = 0
def back(cur):
global cnt
if cur == n:
cnt += 1
return
for i in range(n):
if isUsed1[i] or isUsed2[i+cur] or isUsed3[cur - i + n - 1]: continue
isUsed1[i] = True
isUsed2[cur+i] = True
isUsed3[cur-i+n-1] = True
back(cur+1)
isUsed1[i] = False
isUsed2[cur + i] = False
isUsed3[cur - i + n - 1] = False
back(0)
print(cnt)