728x90
https://www.acmicpc.net/problem/9663
9663번: N-Queen
N-Queen 문제는 크기가 N × N인 체스판 위에 퀸 N개를 서로 공격할 수 없게 놓는 문제이다. N이 주어졌을 때, 퀸을 놓는 방법의 수를 구하는 프로그램을 작성하시오.
www.acmicpc.net
해당 문제는 브루트포스와 백트래킹으로 문제를 해결 하였습니다. 깊이우선탐색으로 탐색 합니다. 다음열에 Queen을 놓을 수 없을때 BackTracking을 합니다.
N = int(input())
count = 0
def isvalied(queens,i,j):
if N > i >=0 and N > j >= 0:
for queen in queens:
k, n = queen
if i == k or j == n or abs(i-k) == abs(n-j):
return False
return True
else:
return False
def dfs(i,j):
global count
global queens
if len(queens) == N:
count += 1
return
for k in range(N):
if isvalied(queens, i+1, k):
queens.append([i+1,k])
dfs(i+1, k)
queens.pop()
queens = []
for i in range(N):
queens.append([0,i])
dfs(0,i)
queens.pop()
print(count)
728x90
'알고리즘 > 백준' 카테고리의 다른 글
[백준] 12100번 : 2048 (Easy) (0) | 2023.07.21 |
---|---|
[백준] 15649번 : N과 M(1) (0) | 2023.07.18 |
[백준] 2805번 : 나무자르기 (0) | 2023.07.17 |
[백준] 2110번 : 공유기 설치 (0) | 2023.07.17 |
[백준] 5639번 : 이진 검색 트리 (0) | 2023.07.17 |