백트래킹은 "가능한 모든 경우의 수를 탐색하되, 불필요한 경우는 조기에 제외하여 탐색 범위를 줄이는 기법"입니다. 일반적으로 재귀 함수를 이용하여 구현됩니다. 재귀 호출을 하면서 각 단계에서 선택 가능한 모든 옵션을 시도하고, 조건에 맞지 않는 옵션은 배제하여 다음 단계로 진행합니다.

// 알고리즘 - 백트래킹
public class Main {
static int n = 4;
static int[] board = new int[n];
static int cnt;
public static int nQueen(int row) {
if(row == n){
cnt++;
for (int i = 0; i < n; i++) {
System.out.print(board[i] + " ");
}
System.out.println();
return cnt;
}
for (int i = 0; i < n; i++) {
board[row] = i;
// promising
if(isPromising(row)){
nQueen(row + 1);
}
}
return cnt;
}
public static boolean isPromising(int row){
for (int i = 0; i < row; i++) {
if(board[row] == board[i] || row - i == Math.abs(board[row] - board[i])){
return false;
}
}
return true;
}
public static void main(String[] args) {
System.out.println("경우의 수: " + nQueen(0)); // 2
}
}