https://school.programmers.co.kr/learn/courses/30/lessons/12952
function solution(n) {
let answer = 0;
const dfs = (depth, arr)=>{
// 종료 조건
if(depth === n){
answer++;
return;
}
// 경우의 수 탐색하기. i는 각 행의 한 칸을 의미한다.
for(let i=0; i<n; i++){
let flag = true;
// 좌표 저장했던 리스트에서 하나씩 꺼내 비교
for(let [x,y] of arr){
// 같은 행,열 대각선이면 flag를 false로 바꾼다.
if(y-i === 0 || Math.abs(x-depth) === Math.abs(y-i)){
flag = false;
break;
}
}
if(flag) dfs(depth+1,[...arr,[depth,i]]); // 한줄 내려오고 좌표 저장
}
}
dfs(0, []);
return answer;
}