문제링크:https://www.acmicpc.net/problem/9663
# limitation - 백트레킹 함수 > 퀸이 같은 행렬에 있으면 안됨, 퀸이 대각선에 있으면 안됨 false일시 그행 제외
# 입력 N은 NxN 체스판 row[0]*n 으로 사용
# result - > =+ 로 출력할 방법갯수 카운팅
# 출력 퀸을 놓을수있는 방법 출력
#
import sys
n = int(sys.stdin.readline())
row = [0] * n
cnt = 0
#퀸을 놓고 그 이후 놓기 불가능한 줄 찾기
def prommising(a):
for i in range(a):
if row[a] == row[i] or abs(row[a] - row[i]) == abs(a - i):
return False
return True
def queen(a):
global cnt
if a == n: # <-- 재귀 탈출조건을 먼저 설계하는 것이 중요하다 마지막 줄에 다다르면 종료
cnt += 1
return
else:
for i in range(n):
# 퀸을 [a,i]에 놓기
row[a] = i
if prommising(a):
queen(a + 1)
queen(0)
print(cnt)
'Algorithm > 백준(파이썬)' 카테고리의 다른 글
백준 10819 파이썬(Python) 문제풀이 차이를 최대로 (0) | 2023.04.12 |
---|---|
백준 1074 파이썬(Python) 문제풀이 Z (0) | 2023.04.12 |
백준 1914 파이썬(Python) 문제풀이 하노이의 탑 (0) | 2023.04.11 |
백준 2628 파이썬(Python) 문제풀이 종이자르기 (0) | 2023.04.11 |
백준 1065 파이썬(Python) 문제풀이 한수 (0) | 2023.04.11 |