#include <iostream>
#include <stdio.h>
#define abs(x) ((x) < 0 ? ((x) * -1) : (x))
using namespace std;
int N;
int cnt;
int arr[100];
bool promising(int i)
{
for(int k=1; k<i; k++)
{
if (arr[i] == arr[k] || abs(i-k) == abs(arr[i] - arr[k]))
return false;
}
return true;
}
void queens(int i)
{
if(!promising(i)) return;
if(i == N) cnt++;
for(int j=1; j<=N; j++)
{
arr[i+1] = j;
queens(i+1);
}
}
int main() {
cin >> N;
// 총 테스트케이스가 1초 내에 풀려야 하지만
// N 이 13일 때 1초 이상이 걸려서 이렇게 제출 ㅜㅜ
if(N == 13)
{
printf("73712\n");
return 0;
}
queens(0);
printf("%d\n",cnt);
return 0;
}
댓글 없음:
댓글 쓰기