개발/algorithm
[백준 9663번] N-Queen - python
zzi_on2
2022. 4. 28. 14:45
문제 링크
풀이
- dfs 사용한 백트래킹 문제
graph는 index 번호가 row 값, 저장된 값이 col 값으로 표현한다.
따라서 맨 윗줄 왼쪽부터 퀸을 하나씩 놓고, 어차피 맨 위에서부터 하나씩 놓기 때문에 위에 놓인 퀸들에 대해서 놓을 수 있는지 없는지 검사한다.
같은 열에 퀸이 있거나, 대각선에 퀸이 위치하면 안된다.
대각선의 퀸이 위치한 것은 row 의 차이와 col 의 차이가 같은 것으로 판단할 수 있다.
import sys
input = sys.stdin.readline
def dfs(depth):
global count
# n개 다 놓았으면 개수 증가
if depth == n:
count += 1
else :
for i in range(n):
# 퀸 놓기
graph[depth] = i
result = True
# 위에 놓여있는 퀸들이랑 비교
for j in range(depth):
# 같은 열에 위치하거나 대각선에 위치하면 놓을 수 없음
if graph[depth] == graph[j] or abs(graph[depth] - graph[j]) == depth-j:
result= False
break
# 놓을 수 있으면
if result :
dfs(depth+1)
n = int(input())
count = 0
# (인덱스 번호, 값)
graph = [0] * n
dfs(0)
print(count)