티스토리 뷰
9663번: N-Queen
N-Queen 문제는 크기가 N × N인 체스판 위에 퀸 N개를 서로 공격할 수 없게 놓는 문제이다. N이 주어졌을 때, 퀸을 놓는 방법의 수를 구하는 프로그램을 작성하시오.
www.acmicpc.net
퇴각 검색 알고리즘을 다룰 때 대표적으로 등장하는 문제다. 2차원 배열이 아닌 인덱스를 행, 요소를 열로 사용하는 1차원 배열을 활용하고, PyPy3로 제출해야만 시간초과 없이 AC를 받을 수 있다.
n = int(input())
# 체스판, 0은 아직 놓이지 않음을 의미
map = [0] * n
ans = 0
# 퀸을 놓을 수 있는지 판단하는 함수
def is_satisfy(x):
for i in range(x):
# 같은 열에 놓였는지, 대각선에 놓였는지(-> 절댓값으로 판단, 왼쪽 위, 오른쪽 위)
if map[i] == map[x] or abs(x - i) == abs(map[x] - map[i]):
return False
return True
def n_queens(x):
global ans
# 마지막 행까지 도달하면 경우의 수 + 1, 함수 종료
if x == n:
ans += 1
return
# 퀸을 놓고 해당 퀸의 위치 만족스러운지 확인 후
# 다음 행으로 넘어감
for i in range(n):
map[x] = i
if is_satisfy(x):
n_queens(x+1)
n_queens(0)
print(ans)
'PS (Problem Solving)' 카테고리의 다른 글
[BOJ, Python] 1759 - 암호 만들기 ( with Backtracking ) (0) | 2022.10.23 |
---|---|
[BOJ, Python] 2580 - 스도쿠 ( with Backtracking ) (0) | 2022.10.20 |
[BOJ, Python, Swift] 12865 - 평범한 배낭 ( with DP, Knapsack ) (0) | 2022.09.29 |
[BOJ, Swift] 16953 - A → B ( with DP, Greedy ) (0) | 2022.09.18 |
[BOJ, Swift] 17298 - 오큰수 ( with 스택 ) (0) | 2022.09.16 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- DP
- 곱셈의 역원
- c++
- D3
- BOJ
- xcode
- 백준
- Javascript
- HTML
- 정보시각화
- DFS
- 보라매사옥
- 백트래킹
- SVG
- ios
- pyrebase
- TIP
- how to remove border of tabbarcontroller
- 하노이탑이동순서
- SceneDelegate
- how to start without storyboard
- 파이썬
- CSS
- Python
- Array
- 자료구조
- swift
- CSV
- PS
- 알고리즘
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | |
7 | 8 | 9 | 10 | 11 | 12 | 13 |
14 | 15 | 16 | 17 | 18 | 19 | 20 |
21 | 22 | 23 | 24 | 25 | 26 | 27 |
28 | 29 | 30 | 31 |
글 보관함