[Baekjoon] 9663번 N-Queen
Updated:
문제
N-Queen 문제는 크기가 N × N인 체스판 위에 퀸 N개를 서로 공격할 수 없게 놓는 문제이다.
N이 주어졌을 때, 퀸을 놓는 방법의 수를 구하는 프로그램을 작성하시오.
입력
첫째 줄에 N이 주어진다. (1 ≤ N < 15)
출력
첫째 줄에 퀸 N개를 서로 공격할 수 없게 놓는 경우의 수를 출력한다.
예제
Example 1:
Input:
8
Output:
92
조건
시간 제한 : 10초
메모리 제한 : 128 MB
풀이과정
내 풀이
재귀를 이용한 백트래킹 기법으로 해결하였다. 처음에는 함수에서 arr을 생성해서 진행하였는데 시간초과가 떠서 아예 함수밖에 선언하고 하니 시간초과문제가 해결되었다.
n = int(input())
result = 0
arr = [0]*n
def recursive(x):
global result
for j in range(x-1):
if arr[j] == arr[x-1] or abs(arr[j]-arr[x-1]) == abs(x-1-j):
return
if x >= n:
result += 1
return
else:
for i in range(n):
arr[x] = i
recursive(x+1)
recursive(0)
print(result)
Leave a comment