본문 바로가기

알고리즘/백준

[백준] 9663번 : N-Queen

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