아래 모든 문제들은 프로그래머스에서 제공 되는 문제를 이용하였습니다, 감사합니다.
가로, 세로 길이가 n인 정사각형으로된 체스판이 있습니다. 체스판 위의 n개의 퀸이 서로를 공격할 수 없도록 배치하고 싶습니다.
예를 들어서 n이 4인경우 다음과 같이 퀸을 배치하면 n개의 퀸은 서로를 한번에 공격 할 수 없습니다.
체스판의 가로 세로의 세로의 길이 n이 매개변수로 주어질 때, n개의 퀸이 조건에 만족 하도록 배치할 수 있는 방법의 수를 return하는 solution함수를 완성해주세요.
#include <string>
#include <vector>
#include <iostream>
#include <array>
using namespace std;
void point_check(vector<vector<int>> &table, int n, int col, int row, int value)
{
int i =0;
for(; col < n; col++)
{
table[row][col] += value;
if(row - i >= 0)
table[row - i][col] += value;
if(row + i < n)
table[row + i][col] += value;
i++;
}
}
void dfs(vector<vector<int>> &table, int n, int col, int row, int &answer)
{
if (n == col)
{
answer++;
return;
}
for(row = 0; row < n; row++)
{
if(table[row][col] == 0)
{
point_check(table,n,col,row,1);
dfs(table, n, col + 1, row, answer);
point_check(table,n,col,row,-1);
}
}
}
int solution(int n) {
int answer = 0;
vector<vector<int>> table(n,vector<int>(n,0));
dfs(table, n, 0, 0, answer);
return answer;
}