Algorithm/BOJ
[백준/9663] N-Queen (with 파이썬)
Potato potage
2023. 1. 1. 20:56
반응형
✔ 문제
✔ 풀이
import sys
input = sys.stdin.readline
n = int(input())
graph = [0] * n
count = 0
def is_promising(x):
for i in range(x):
if graph[x] == graph[i] or abs(graph[x] - graph[i]) == x - i:
return False
return True
def queen(x):
global count
if x == n:
count += 1
return
else:
for i in range(n):
graph[x] = i
if is_promising(x):
queen(x+1)
queen(0)
print(count)
✔ 설명
#Tip
1. 굳이 2차원 배열을 쓸 필요가 없다. (1차원 배열의 인덱스 값을 사용)
2. graph[i] = j 는 'queen을 [i, j]에 놓는다'고 해석할 수 있다.
3. 퀸을 놓지 못하는 경우의 수를 따진다.
3-1. 같은 열에 다른 퀸이 있는 경우
3-2. 양 대각선에 다른 퀸이 있는 경우
✔ 후기
N-queen이 백트래킹 대표 문제라고 한다.
두 번 풀어봤었는데도 날려 풀었는지 매번 새롭다 (ᗒᗣᗕ)՞
다시 복습하면서 진짜 N-queen 문제 정복할테다
참고 자료:
https://chanhuiseok.github.io/posts/baek-1/
[백준] 9663번 - N-Queen
컴퓨터/IT/알고리즘 정리 블로그
chanhuiseok.github.io
https://seongonion.tistory.com/103
[백준] 9663번 N-Queen - 파이썬(Python)
문제 (링크) https://www.acmicpc.net/problem/9663 9663번: N-Queen N-Queen 문제는 크기가 N × N인 체스판 위에 퀸 N개를 서로 공격할 수 없게 놓는 문제이다. N이 주어졌을 때, 퀸을 놓는 방법의 수를 구하는 프로
seongonion.tistory.com
반응형