CodingTest/Baekjun Online Judge

[ BOJ / 파이썬 ] 9663. N-QUEEN

EEOOOO 2023. 1. 30. 15:32

백트래킹을 효율적으로 풀어내는 것과 배열의 대각선 형태의 접근에 대해서 정리할 수 있는 좋은 문제였다.

 

- 배열 사용해서 방문값을 저장해두기 -

 

 

- 대각선 -

왼쪽에서 오른쪽으로 내려오는 대각선 칸들은 같은 줄마다 x+y 값이 같다.

오른쪽에서 왼쪽으로 내려오는 대각선 칸들은 같은 줄마다 x-y+n-1 값이 같다.

 

대각선 개수는 2*n - 1개. 

 

정답코드. 통과.

import sys
input = sys.stdin.readline

def queen(k):
  global result
  if k == n:
    result += 1
    return
    
  for i in range(n):
      if not col[i] and not diagLtoR[i+k] and not diagRtoL[k-i+n-1]:
        col[i] = 1
        diagLtoR[i+k] = 1
        diagRtoL[k-i+n-1] = 1
        queen(k+1)
        col[i] = 0
        diagLtoR[i+k] = 0
        diagRtoL[k-i+n-1] = 0

n = int(input())
result = 0
onBoard = [[0]*(n+1) for _ in range(n+1)]
col = [0]*(n+1)
diagLtoR = [0]*(2*n)
diagRtoL = [0]*(2*n)
queen(0)
print(result)