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


체스판의 가로 세로의 세로의 길이 n이 매개변수로 주어질 때, n개의 퀸이 조건에 만족 하도록 배치할 수 있는 방법의 수를 return하는 solution함수를 완성해주세요.
제한사항- 퀸(Queen)은 가로, 세로, 대각선으로 이동할 수 있습니다.
- n은 12이하의 자연수 입니다.
level2 백트래킹 문제입니다.
0부터n행까지 퀸을 하나씩 가능한 위치에 둡니다
#include <string>
#include <vector>
using namespace std;
int answer = 0;
int N;
int dy[4]={-1,1,1,-1};
int dx[4]={1,1,-1,-1};
void Queen(int y,int x,vector<vector<int>>&tmp){
for(int i=0;i<N;i++){
tmp[y][i]=-1;
tmp[i][x]=-1;
for(int j=0;j<4;j++){
int ny=y+dy[j]*(i+1);
int nx=x+dx[j]*(i+1);
if(ny>=0 && ny<N && nx>=0 && nx<N){
tmp[ny][nx]=-1;
}
}
}
}
void bt(int k,vector<vector<int>>mp){
if(k==N){
answer++;
return;
}
for(int i=0;i<N;i++){
if(mp[k][i]!=-1){
vector<vector<int>>temp=mp;
Queen(k,i,temp);
bt(k+1,temp);
}
}
}
int solution(int n) {
N=n;
vector<vector<int>> mp(n, vector<int>(n,0));
bt(0,mp);
return answer;
}
1차원 벡터의 초기화 방법은 다음과 같습니다
N크기의 벡터를 0으로 초기화
vector<int>A(n,0);
2차원 벡터의 초기화 방법은 다음과 같습니다
M*N크기의 벡터를 0으로 초기화
vector<vector<int>>A(M,vector<int>(N,0))
'programmers' 카테고리의 다른 글
[Programmers]연습문제>3 x n 타일링 (0) | 2022.09.01 |
---|---|
[Programmers]탐욕법(Greedy)>구명보트 (0) | 2022.09.01 |
[Programmers]2019 KAKAO BLIND RECRUITMENT > 오픈채팅방 + C++ STL Map사용법 정리 (0) | 2022.09.01 |
[Programmers]깊이/너비 우선 탐색(DFS/BFS)>여행경로 (0) | 2022.08.26 |
[Programmers]깊이/너비 우선 탐색(DFS/BFS)>단어 변환 (0) | 2022.08.26 |