본문 바로가기

Programmers/Level3

N-Queen

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

일차원 배열을 이용하여 각 인덱스에 해당하는 행의 어느 열에 퀸을 놓았는지 저장하였다.

대각선은 행의 차이 == 열의 차이일 경우 대각선으로 판단하였다.

'Programmers > Level3' 카테고리의 다른 글

야근 지수  (0) 2021.11.24
합승 택시 요금  (0) 2021.11.10
숫자 게임  (0) 2021.11.03
가장 긴 팰린드롬  (0) 2021.09.23
기둥과 보 설치  (0) 2021.09.19