N-Queen 문제는 크기가 N × N인 체스판 위에 퀸 N개를 서로 공격할 수 없게 놓는 문제이다.
N이 주어졌을 때, 퀸을 놓는 방법의 수를 구하는 프로그램을 작성하시오.
1. 재귀호출을 통한 백트래킹과 다음 퀸 진행
2. 세로 위치와 대각선 위치 파악
// 재귀호출을 통한 백트래킹과 다음 퀸 진행
public static void nqueen(int cdx) {
if (cdx == n) {
count++;
return;
}
for (int i = 0; i < n; i++) {
board[cdx] = i;
if (promising(cdx)) {
nqueen(cdx + 1);
}
}
}
---------------------------------
// 세로 위치와 대각선 위치 파악
public static boolean promising(int cdx) {
for (int i = 0; i < cdx; i++) {
if (board[cdx] == board[i] || Math.abs(cdx - i) == Math.abs(board[cdx] - board[i])) {
return false;
}
}
return true;
}
----------------------------------
public static int solution(){
Scanner scanner = new Scanner(System.in);
n = scanner.nextInt();
board = new int[n];
count = 0;
nqueen(0);
return count;
}