티스토리 뷰

출처: https://www.acmicpc.net/problem/9663

 

9663번: N-Queen

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

www.acmicpc.net

 

백트래킹의 대표문제 N-queen 

dfs 다시 공부하고 돌아와서 풀어보기.

 

const fs = require('fs');
const input = fs.readFileSync("/dev/stdin").toString().trim();



function solve(n) {
  let answer = 0; 
  let cols = Array(n).fill(0); 
  answer = dfs(n,cols,0,answer); 

  function dfs(n,cols,row,answer){ 
      if(n===row) return ++answer; 
      for(let i =0; i<n; i++){ 
          cols[row] = i; 
          if(isPossible(row,i,cols)){ 
              answer = dfs(n,cols,row+1,answer); 
          }
      }
      return answer; 
  }

  function isPossible(x,y,cols){ 
      for(let i = 0; i<x; i++){ 
          if(cols[i] ===y ||Math.abs(x-i) === Math.abs(y-cols[i]))
          return false; 
      }
      return true; 
  }
return answer;
}

console.log(solve(+input))

 

 

728x90
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함