ALGORITHM/PROGRAMMERS

[프로그래머스] N-Queen

0298 2021. 9. 6. 10:49

https://programmers.co.kr/learn/courses/30/lessons/12952

 

코딩테스트 연습 - N-Queen

가로, 세로 길이가 n인 정사각형으로된 체스판이 있습니다. 체스판 위의 n개의 퀸이 서로를 공격할 수 없도록 배치하고 싶습니다. 예를 들어서 n이 4인경우 다음과 같이 퀸을 배치하면 n개의 퀸은

programmers.co.kr

2021-09-06


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
35
36
37
class Solution {
   static int answer;
    static int[] arr;
 
    static void solve(int row, int n) {
        if(row == n) {
            answer++;
            return;
        }
 
        for(int i = 0; i < n; i++) {
            arr[row] = i;
            if(possible(row)) {
                solve(row+1, n);
            }
        }
    }
 
    static boolean possible(int row) {
        for(int i = 0; i < row; i++) {
            if(arr[row] == arr[i]) return false;
            if(Math.abs(row - i) == Math.abs(arr[row] - arr[i])) return false;
        }
        return true;
    }
 
    static int solution(int n) {
        answer = 0;
        arr = new int[n];
        // solve(0, n);
         for(int i = 0; i < n; i++) {
            arr[0= i;
            solve(1, n);
        }
        return answer;
    }
}
cs

#문제풀이

1차원 배열을 이용해서, arr[열] = 행을 두고 풀었다. 

 

line 30) 0번째 열부터 모두 돌려도 되고, 0번째 열은 행을 하나씩 집어넣고 1번째 열부터 돌려도 된다.