https://www.acmicpc.net/problem/9663
9663번: N-Queen
N-Queen 문제는 크기가 N × N인 체스판 위에 퀸 N개를 서로 공격할 수 없게 놓는 문제이다. N이 주어졌을 때, 퀸을 놓는 방법의 수를 구하는 프로그램을 작성하시오.
www.acmicpc.net
문제 접근
거의 시간 빠듯하게 제출했다.
DFS로 깡구현하듯 재귀로 깡구현해버렸다
10초라 넉넉해서 이방식으로 했는데 자칫하면 시간초과할뻔했다...
x축이 같거나 대각선에 위치하는지 체크하고 모든 포지션에 둬보고 가능하다면 stack에 넣는 방법으로 구현했다.
코드
import sys
input = sys.stdin.readline
"""
앞에 stack에 저장된 값과 현재 위치의 차이의 절대값 x==y라면 ㄴㄴ
"""
def DFS(y):
if len(stack) == N:
global ans
ans+=1
return
for x in range(N):
for sx, sy in stack:
if sx == x or (abs(sx - x) == abs(sy - y)):
break
else:
stack.append((x,y))
DFS(y+1)
stack.remove((x,y))
N = int(input())
ans = 0
stack = []
DFS(0)
print(ans)
'백준 > 문제풀이_python' 카테고리의 다른 글
16566 카드 게임 (python) (0) | 2023.11.22 |
---|---|
15686 치킨 배달 (python) (0) | 2023.11.19 |
18291 비요뜨의 징검다리 건너기 python (0) | 2023.01.17 |
1238 파티 python (0) | 2023.01.15 |
7662 이중 우선순위 큐 python (0) | 2023.01.13 |
댓글