Notice
Recent Posts
Recent Comments
Link
«   2024/07   »
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
Archives
Today
Total
관리 메뉴

csct3434

[level 2] N-Queen - 12952 본문

프로그래머스

[level 2] N-Queen - 12952

csct3434 2024. 2. 28. 19:55

문제 링크

class Solution {

    private int[][] isBlocked;
    private int size, answer = 0;

    public int solution(int n) {
       init(n);
       solve(0);
       return answer;
    }

    private void init(int n) {
       size = n;
       isBlocked = new int[n][n];
    }

    public void solve(int row) {
       if (row == size) {
          answer++;
          return;
       }

       for (int col = 0; col < size; col++) {
          if (isBlocked[row][col] == 0) {
             setBlocked(row, col, true);
             solve(row + 1);
             setBlocked(row, col, false);
          }
       }
    }

    private void setBlocked(int row, int col, boolean blocked) {
       int value = blocked ? 1 : -1;

       for (int i = 1; row + i < size; i++) {
          isBlocked[row + i][col] += value;
       }

       for (int i = 1; Math.max(row, col) + i < size; i++) {
          isBlocked[row + i][col + i] += value;
       }

       for (int i = 1; row + i < size && col - i >= 0; i++) {
          isBlocked[row + i][col - i] += value;
       }
    }
}