9663번: N-Queen
N-Queen 문제는 크기가 N × N인 체스판 위에 퀸 N개를 서로 공격할 수 없게 놓는 문제이다. N이 주어졌을 때, 퀸을 놓는 방법의 수를 구하는 프로그램을 작성하시오.
www.acmicpc.net
# N-Queen
# https://www.acmicpc.net/problem/9663 (백트래킹)
# N이 4일때 [[1, 3, 0, 2], [2, 0, 3, 1]] 2개 경우가 있다
def check(a, row, col):
for r, c in enumerate(a):
if col == c or abs(col - c) == abs(row - r):
return False
return True
def recursive(row, res, a=[]):
if row == N:
res.append(a[:])
return
for col in range(N):
if check(a, row, col): # 가지치기 (이전 퀀의 위치에 따라 탐색 제외)
a.append(col)
recursive(row + 1, res, a)
a.pop()
N = int(input())
res = []
recursive(0, res)
print(len(res))
# 파이썬은 시간초과한다
answer = [0, 1, 0, 0, 2, 10, 4, 40, 92, 352, 724, 2680, 14200, 73712, 365596]
print(answer[int(input())])
'BOJ 알고리즘 (패캠) > 탐욕, 백트래킹' 카테고리의 다른 글
1759번: 암호만들기 (백트래킹) (0) | 2020.12.03 |
---|---|
1987번: 알파벳 (백트래킹) (0) | 2020.12.02 |
1781번: 컵라면 (탐욕) (0) | 2020.10.24 |
1461번: 도서관 (탐욕) (0) | 2020.10.23 |
2212번: 센서 (탐욕) (0) | 2020.10.23 |