#include <bits/stdc++.h>
using namespace std;
int n, cnt;
bool isused1[30], isused2[30], isused3[30];
void func(int cur) {
if(cur==n) {
cnt++;
return;
}
for(int i=0; i<n; i++) {
if(isused1[i] || isused2[cur+i] || isused3[cur-i+n-1]) {
continue;
}
isused1[i] = true;
isused2[cur+i] = true;
isused3[cur-i+n-1] = true;
func(cur+1);
isused1[i] = false;
isused2[cur+i] = false;
isused3[cur-i+n-1] = false;
}
}
int main(void) {
ios::sync_with_stdio(0);
cin.tie(0);
cin >> n;
func(0);
cout << cnt;
}
한 줄에 하나만 놓을 수 있다.
1. y축 중복 확인
2. 왼쪽 아래 -> 오른쪽 위 대각선 방향 확인
3. 왼쪽 위 -> 오른쪽 아래 대각선 방향 확인