N-Queens II
HardBacktracking
Solution
export function totalNQueens(n: number): number {
// 따로 사용한 Column과 Diagonal을 저장해서 사용.
const cols = new Set<number>();
const posDiags = new Set<number>();
const negDiags = new Set<number>();
function dfs(row: number) {
if (row === n) {
return 1;
}
let result = 0;
for (let col = 0; col < n; col++) {
if (posDiags.has(row + col) || negDiags.has(row - col) || cols.has(col)) {
continue;
}
posDiags.add(row + col);
negDiags.add(row - col);
cols.add(col);
result += dfs(row + 1);
posDiags.delete(row + col);
negDiags.delete(row - col);
cols.delete(col);
}
return result;
}
return dfs(0);
}
/* 기존의 leetcode-51.ts 방법
function totalNQueens(n: number): number {
let result = 0;
const stack: number[] = [];
function isPossible(col: number, row: number, index: number) {
return !(col === index || stack.length - row === Math.abs(col - index));
}
function backtracking(): void {
if (stack.length === n) {
result += 1;
return;
}
for (let i = 0; i < n; i++) {
if (stack.every((row, col) => isPossible(row, col, i))) {
stack.push(i);
backtracking();
stack.pop();
}
}
return;
}
backtracking();
return result;
}
*/