CS/알고리즘_문제풀이(파이썬)

N-Queen

Jedy_Kim 2021. 8. 13. 15:47
728x90

문제 설명

가로, 세로 길이가 n인 정사각형으로된 체스판이 있습니다. 체스판 위의 n개의 퀸이 서로를 공격할 수 없도록 배치하고 싶습니다.

예를 들어서 n이 4인경우 다음과 같이 퀸을 배치하면 n개의 퀸은 서로를 한번에 공격 할 수 없습니다.

 

체스판의 가로 세로의 세로의 길이 n이 매개변수로 주어질 때, n개의 퀸이 조건에 만족 하도록 배치할 수 있는 방법의 수를 return하는 solution함수를 완성해주세요.

제한사항

  • 퀸(Queen)은 가로, 세로, 대각선으로 이동할 수 있습니다.
  • n은 12이하의 자연수 입니다.

입출력 예

n result
4 2

입출력 예 설명

입출력 예 #1
문제의 예시와 같습니다.

 

#코드

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
32
33
34
35
36
# n_queens
def check(i, col):
    global answer
    
    n = len(col) - 1     
    
    if promising(i, col):
        if i == n: # 답
            answer += 1
        else:
            for j in range(1, (n + 1)): # 열을 체크한다.
                col[i + 1= j
                check(i + 1, col)
    
 
def promising(i, col):      
    k = 1    
    while k < i:
        # 열검사     : col[i] => Queen이 놓여있는 열
        # 대각선 검사 : 대각선 조건은 "열의 차이가 행의 차이와 같다." 이다.        
        #                    열의 차이               행의 차이
        #            |col[i] - col[k]| = |i - k|       
        if col[i] == col[k] or abs(col[i] - col[k]) == (i - k):
            return False
        k += 1    
    return True  

 
def solution(n):
    global answer    
    answer = 0
    
    col = [0* (n + 1)
    check(0, col)
    
    return answer
cs

 

반응형

'CS > 알고리즘_문제풀이(파이썬)' 카테고리의 다른 글

카펫  (0) 2021.08.16
주사위 게임  (0) 2021.08.16
사탕 담기  (0) 2021.08.13
세 소수의 합  (0) 2021.08.13
알파윷 - E  (1) 2021.08.11