Algorithm/LeetCode

[LeetCode # 52] N-Queens II

꼽냥이 2021. 6. 18. 20:57
반응형

N-Queens (https://ggop-n.tistory.com/34) 문제와 유사하지만, 앞선 문제에서 N 개의 Queen 을 배치한 체스판을 결과로 return 하는 게 아닌, N 개의 Queen 을 배치한 체스판이 몇 개의 모양으로 존재할 수 있는 지를 구하는 문제

 

N-Queens 문제 풀이와 풀이 방식은 동일하게 진행했고, 차이가 있었던 점은 결과값으로 몇 개의 경우가 존재하는 지만 저장하도록 했다.

 

작성한 코드는 다음과 같다.

 

class Solution {
public:
    int ans;
    bool check(vector<vector<bool>>& board, int r, int c, int n) {
        for (int k = 1; r - k >= 0; k++) {
            if (board[r - k][c])
                return false;
            if (c - k >= 0 && board[r - k][c - k])
                return false;
            if (c + k < n && board[r - k][c + k])
                return false;
        }
        return true;
    }
    void solveNQueen(vector<vector<bool>>& board, int row, int n) {
        if (row == n) {
            ans++;
            return;
        }
        for (int j = 0; j < n; j++) {
            if (check(board, row, j, n)) {
                board[row][j] = true;
                solveNQueen(board, row + 1, n);
                board[row][j] = false;
            }
        }
    }
    int totalNQueens(int n) {
        vector<vector<bool>> board(n, vector<bool>(n, false));
        solveNQueen(board, 0, n);
        return ans;
    }
};