DFS
https://school.programmers.co.kr/learn/courses/30/lessons/12952
import java.util.*;
class Solution {
static int answer;
static List<Point> queens = new ArrayList<>();
public int solution(int n) {
dfs(0, n);
return answer;
}
public void dfs(int depth, int n) {
// 모두 배치한 경우 answer + 1
if(depth == n) {
answer++;
return ;
}
// 길이가 n인 정사각형에 n개의 퀸을 넣어야 하므로, 한 row에 하나의 퀸은 반드시 들어감
int row = depth;
for(int col = 0; col<n; col++) {
if(isPossible(row, col)) {
queens.add(new Point(row, col));
dfs(depth + 1, n);
queens.remove(queens.size() - 1);
}
}
}
private boolean isPossible(int row, int col) {
// 세로, 대각선에 위치한 퀸이 있는지 확인
for(Point p : queens) {
if(p.col == col || Math.abs(p.row - row) == Math.abs(p.col - col)) {
return false;
}
}
return true;
}
public static class Point {
int row;
int col;
public Point(int row, int col) {
this.row = row;
this.col = col;
}
}
}
20분