[Python][프로그래머스][Level3] N-Queen

[Python][프로그래머스][Level3] N-Queen

코드

answer=0
def queen(num,board):
    global answer
    if num==len(board):
        answer+=1
        return
    
    for x in range(1,len(board)+1):
        if x in board[:num]:
            continue
        for i in range(1,num+1):
            if abs(x-board[num-i])==i:
                break
        else:
            board[num]=x
            queen(num+1,board)
            board[num]=0
            
def solution(n):
    queen(0,[0]*n)
    return answer

DFS로 유명한 N queen 문제다.

체스판의 길이 n과 동일한 길이의 배열을 선언한다.

이 배열은 queen의 위치번호를 저장할 배열이다.

알맞은 위치일 경우는

  1. 동일한 위치 번호를 가진 퀸이 없어야 한다.

  2. 위치 번호가 배열의 index 의 차이와 동일한 경우가 없어야 한다. (대각선)

따라서 각 배열에 모든 번호를 넣으면서 알맞은 경우만 답에 추가한다.

Discussion and feedback