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
31
32
33
34
|
import java.util.*;
class Solution {
static int cnt = 0;
static void DFS(int[] visited, int n, int row) {
// n개의 queen을 모두 놓았을 경우
if(row == n) {
cnt++;
return;
}
for(int col=0;col<n;col++) {
visited[row] = col;
if(Check(visited, row)) {
DFS(visited, n, row + 1);
}
}
}
static boolean Check(int[] visited, int row) {
for(int i=0;i<row;i++) {
// 같은 열 또는 대각선에 이미 있는 경우
if(visited[i] == visited[row] || row - i == Math.abs(visited[row] - visited[i]))
return false;
}
return true;
}
public int solution(int n) {
int answer = 0;
int[] visited = new int[n]; // 열 중복 검사용 배열
DFS(visited, n, 0);
answer = cnt;
return answer;
}
}
|
cs |
일차원 배열을 이용하여 각 인덱스에 해당하는 행의 어느 열에 퀸을 놓았는지 저장하였다.
대각선은 행의 차이 == 열의 차이일 경우 대각선으로 판단하였다.