10000COW 2023. 1. 9. 16:09
728x90

LeetCode 51. N-Queens (Python / JavaScript)

https://leetcode.com/problems/n-queens/description/

 

N-Queens - LeetCode

N-Queens - The n-queens puzzle is the problem of placing n queens on an n x n chessboard such that no two queens attack each other. Given an integer n, return all distinct solutions to the n-queens puzzle. You may return the answer in any order. Each solut

leetcode.com

 

Python

def solveQueens(n):
    col = set()
    posDiag = set() # (r + c)
    negDiag = set() # (r - c)
    
    res = []
    board = [["ใ…"] * n for i in range(n)]
    
    def backtrack(r):
        if r == n:
            copy = ["".join(row) for row in board]
            res.append(copy)
            print('res', res)
        
        for c in range(n):
            if c in col or (r+c) in posDiag or (r-c) in negDiag:
                continue
            
            col.add(c)
            posDiag.add(r+c)
            negDiag.add(r-c)
            board[r][c] = "Q"
            
            backtrack(r+1)
            
            col.remove(c)
            posDiag.remove(r + c)
            negDiag.remove(r - c)
            board[r][c] = "ใ…"
            
    backtrack(0)
    return len(res)

 

JavaScript

function solveQueens(n){
    const cols = new Set();
    const posDig = new Set();
    const negDig = new Set();
    
    const res = []
    const board = [];
    for(let i=0; i < n; i++){
        board[i] = []
        for(let j=0; j < n; j++){
            board[i][j] = '.';
        }
    }
    
    function backTrack(r){
        if(r === n){
            for(let i=0; i<n; i++){
                res.push(board[i].join(''))
            }
            console.log(res);
        }
        
        for(let c=0; c < n; c++){
            if(cols.has(c) || posDig.has(r+c) || negDig.has(r-c)){
                    continue;
            }            
            else{
                cols.add(c);
                posDig.add(r+c);
                negDig.add(r-c);
                board[r][c] = "Q";
                
                backTrack(r+1);
                
                cols.delete(c);
                posDig.delete(r+c);
                negDig.delete(r-c);
                board[r][c] = "."
            }
        }
    }     
            
    
    backTrack(0)
    return res
}
728x90