24์ผ ์งํํ๋ ์๊ณ ๋ฆฌ์ฆ ์คํฐ๋์์ ์น๊ตฌ๊ฐ ํ์ดํ์ฌ์ค ๋ฌธ์ ์น๊ตฌ์ ํ์ด๋ฅผ ๋ฃ๊ณ ์ง์ ์๊ฐํ๋ฉฐ ๋ค์ ํ๋ฒ ํ์ด๋ณด์๋ค. ์ค๋ช ์ ๋ค์ ํ ๋ด๊ฐ ๋ค์ ๋ฌธ์ ๋ฅผ ํ์ด๋ณด๋ ๋์ฑ ์ดํด๋ ์ ๋๊ณ ์ฝ๊ฒ ํ ์ ์์๋ค.
๋ฐฑํธ๋ํน์ ๋ํ์ ์ธ ๋ฌธ์ ๋ก ๋ถ๋ฆฌ๋ Nํธ ๋ฌธ์ ์ด๋ค.
Nํธ ๋ฌธ์ ๋ N*N ํฌ๊ธฐ์ ์ฒด์คํ์์ N๊ฐ์ ํธ์ด ์๋ก ๊ณต๊ฒฉํ ์ ์๋๋ก ๋ฐฐ์นํ๋ ๊ฒฝ์ฐ์ ์๋ฅผ ์ฐพ์๋ด๋ ๋ฌธ์ ์ด๋ค.
์น๊ตฌ์ ์ค๋ช ๋๋ก ๋ฐฑํธ๋ํน์ ์ด์ฉํด๋ณด๊ธฐ๋ก ํ์๋ค.
๊ฐ์ง์น๊ธฐ ํ์์ผ๋ก ํ์ฌ ํธ์ ๋๋ ์๋ฆฌ๊ฐ ์ ๋งํ๋ค๋ฉด ๊ทธ๋๋ก ์งํํด์ฃผ์๊ณ , ์ ๋งํ์ง ์๋ค๋ฉด ์ฌ๊ท ํ์์ผ๋ก ๋ค์ ์ด๋ก ๋์ด๊ฐ ๋ค์ ์ ๋ง์ฑ์ ๊ฒ์ฌํด์ฃผ์๋ค.
๋ง์ง๋ง ์นธ ๊น์ง ๋๊ธฐ์ง์๊ณ ๋๋ฌํ๋ค๋ฉด ๊ฒฝ์ฐ์ ์๋ฅผ ํ๋ ์ฆ๊ฐ์์ผ์ฃผ์๋ค.
#include<iostream>
#include<cmath>
using namespace std;
int n;
int cols[15] = {};
int cnt = 0;
bool check(int r){
for(int i = 0; i < r; i++){
// ๊ฐ์ ์ด์ธ์ง ๊ฒ์ฌ
if(cols[r] == cols[i])
return false;
// ๋๊ฐ์ ๊ฒ์ฌ
if(abs(r - i) == abs(cols[r] - cols[i]))
return false;
}
return true;
}
void FindQueen(int r){
if(r == n){
++cnt;
return;
}
for(int i = 0; i < n; i++){
cols[r] = i;
if(check(r)){
FindQueen(r + 1);
}
}
}
int main(){
ios_base::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr);
cin >> n;
FindQueen(0);
cout << cnt;
}