N-Queens
문제 파악
주어진 n x n 체스판 위에 n개의 퀸을 배치하는 문제(퀸은 같 행, 열, 대각선 공격 가능) N-Queens - LeetCode
접근 방법
백트래킹을 사용하여 가능한 모든 퀸의 배치를 탐색한다.
- 순회를 돌면서 각 위치에 퀸을 놓을때, 해당 위치가 다른 퀸과 충돌하지 않는지 확인
 - 가능한 경우 해당위치에 퀸을 놓고 다음 행으로 이동
 - 모든 행에 퀸을 놓은 경우 해당 배치 결과를 리스트에 추가
 
코드 구현
class Solution:
    def solveNQueens(self, n: int) -> List[List[str]]:
        def is_valid(x, y):
            # 가로세로
            for i in range(n):
                if board[x][i] == 'Q' or board[i][y] == 'Q':
                    return False
                
            # 대각선 체크 
            for i in range(n):
                for j in range(n):
                    if (i + j == x + y or i - j == x - y) and board[i][j] == 'Q':
                        return False
                    
            return True
                    
        def backtrack(row):
            # base case
            if row == n:
                ans.append([''.join(row) for row in board])
                return
            
            for col in range(n):
                if is_valid(row, col):
                    board[row][col] = 'Q'
                    backtrack(row + 1)
                    board[row][col] = '.'
            
        
        board = [['.']*n for _ in range(n)]
        ans = []
        backtrack(0)
        return ans
Leave a comment