https://www.acmicpc.net/problem/9663
#include <iostream>
#include <algorithm>
using namespace std;
int N;
int col[15];
int result=0;
//대각선이나 같은 줄에 있으면 false를 반환 아니라면 true
bool isPromising(int i){
for(int j=0;j<i;j++){
if(col[j]==col[i] || abs(col[i]-col[j])==(i-j)){
return false;
}
}
return true;
}
//N개 만큼 놓았으면 +1 하나 놓을 때마다 확인
void nQueen(int i){
if(i==N){
result++;
return;
}else{
for(int j=0;j<N;j++){
col[i]=j;
if(isPromising(i)){
nQueen(i+1);
}
}
}
}
int main(){
cin>> N;
nQueen(0);
cout<<result<<endl;
return 0;
}
'개발자 > algorithm' 카테고리의 다른 글
백준 1010번 : 다리 놓기 (c++) (0) | 2020.03.20 |
---|---|
2018 카카오 코딩테스트 1번 : 비밀지도 (c++) (0) | 2020.03.18 |
백준 1339번 : 단어 수학 (c++) (0) | 2020.03.10 |
백준 1920번 : 수 찾기 (c++ 시간 초과 해결) (0) | 2020.03.09 |
백준 1759번 : 암호 만들기 (c++) (0) | 2020.03.08 |