[알고리즘] NQueen (백준 9663)

SeHoony·2022년 4월 5일
1
post-thumbnail

백준 9663번 문제 ) NQueen

1. 필요 변수

1) N : 체스판 한 변의 길이 // 퀸의 갯수
2) row :

  • [중요] 이런 문제는 행을 중심으로 탐색하는 게 유리하다 => '대각선' 상의 경우의 수 처리하기 편리
  • [중요] 체스판은 2차원 배열이다. row 배열의 index를 행, value를 열로 생각한다.
    3) count : 총 경우의 수(퀸이 놓일)
import sys
N = int(sys.stdin.readline())
row = [0]*N
count = 0

def checkQueens(x) : # 같은 열인지 대각선 어떤 지만 확인하면 된다.
    for i in range(x):
        if row[i] == row[x] or abs(x-i) == abs(row[x]-row[i]):
            return False
    return True

def NQueen(x):
    global count    
    
    # 종료조건
    if x == N :
        count +=1
        return   
          
    else :
        for i in range(N):
            row[x] = i
            if checkQueens(x) :         
                NQueen(x+1)            
          
NQueen(0)
print(count)
profile
두 발로 매일 정진하는 두발자, 강세훈입니다. 저는 '두 발'이라는 이 단어를 참 좋아합니다. 이 말이 주는 건강, 정직 그리고 성실의 느낌이 제가 주는 분위기가 되었으면 좋겠습니다.

0개의 댓글