백준 node.js 9663번 N-Queen 백트래킹 JavaScript JS

 

 

9663번: N-Queen

N-Queen 문제는 크기가 N × N인 체스판 위에 퀸 N개를 서로 공격할 수 없게 놓는 문제이다. N이 주어졌을 때, 퀸을 놓는 방법의 수를 구하는 프로그램을 작성하시오.

www.acmicpc.net

N-Queen문제 풀이

복습차원에서 적습니다.

let fs = require('fs');
let input = fs.readFileSync('/dev/stdin').toString().trim()
const N = +input;
let answer = 0;

next(0, Array(N).fill(0))
console.log(answer)

function next(row,board) {
  if(row === N){
    answer++
    return
  }
  for(let i=0; i<N; i++){
    if(check(board,i, row)){
      const newBoard = [...board]
      newBoard[row] = i
      next(row+1,newBoard)
    }
  }
}

function check(board , col, row){
  for(let i=0; i<row; i++){
    const num = board[i]
    const sub = row-i
    if(num === col || num+sub === col || num-sub === col){
      return false
    }
  }
  return true
}