출처 : 백준 #9663
시간 제한 | 메모리 제한 |
---|---|
10초 | 128MB |
N-Queen 문제는 크기가 N × N인 체스판 위에 퀸 N개를 서로 공격할 수 없게 놓는 문제이다.
N이 주어졌을 때, 퀸을 놓는 방법의 수를 구하는 프로그램을 작성하시오.
첫째 줄에 N이 주어진다. (1 ≤ N < 15)
첫째 줄에 퀸 N개를 서로 공격할 수 없게 놓는 경우의 수를 출력한다.
8
92
place 함수
)를 어떻게 짜느냐가 관건이다.(board[j] == i)
(abs(board[j]-i) == abs(j-k))
backtrack
에서는 for문을 0부터 n-1까지 돌면서 place 함수를 통과했다면, k가 도착점에 도착했는지 아닌지를 판별한 후 도착했다면 count
를 1 증가 시키고 아니라면 k에 1을 더한 값을 재귀적으로 돌린다.# 백준 9663번 N-Queen
from sys import stdin
input = stdin.readline
n = int(input())
board = [-1]*n
count = 0
def backtrack(board, k, n):
global count
for i in range(n):
if place(board, k, i):
board[k] = i
if k == n-1:
count += 1
# print('chess :', end=" ")
# for j in range(n):
# print(board[j], end=" ")
# print()
return
else:
backtrack(board, k+1, n)
def place(board, k, i):
for j in range(k):
if (board[j] == i) or (abs(board[j]-i) == abs(j-k)):
return False
return True
backtrack(board, 0, n)
print(count)