백트래킹 (Backtracking) 설명:
백트래킹은 결정 문제(decision problem) 해결을 위해 모든 가능한 조합을 시스템적으로 탐색하는 알고리즘 방법론입니다. 백트래킹은 상태 공간 트리(state space tree)의 모든 경로를 추적하여 해를 찾습니다. 만약 현재 경로가 해결책으로 이어질 것 같지 않으면 (즉, 이것이 유망하지(promising) 않으면), 그 경로의 더 깊은 부분으로의 탐색을 포기하고(백트랙) 다른 경로를 선택합니다.
백트래킹의 특징:
백트래킹의 대표적인 예제:
예제와 솔루션 (N-Queens 문제):
문제:
N x N 체스판에 N개의 퀸을 서로 공격할 수 없게 배치하는 모든 가능한 방법을 찾아라.
function solveNQueens(n) {
const board = Array.from({ length: n }, () => Array(n).fill('.'));
const results = [];
const isSafe = (row, col) => {
for (let i = 0; i < row; i++) {
if (board[i][col] === 'Q') return false;
if (board[i][col - (row - i)] === 'Q') return false;
if (board[i][col + (row - i)] === 'Q') return false;
}
return true;
};
const backtrack = (row) => {
if (row === n) {
results.push(board.map(row => row.join('')));
return;
}
for (let col = 0; col < n; col++) {
if (isSafe(row, col)) {
board[row][col] = 'Q';
backtrack(row + 1);
board[row][col] = '.';
}
}
};
backtrack(0);
return results;
}
console.log(solveNQueens(4));
위 코드는 N-Queens 문제를 해결하기 위한 백트래킹 알고리즘을 사용합니다. backtrack 함수는 각 행마다 퀸을 배치하는데, isSafe 함수를 사용하여 현재 위치에 퀸을 배치할 수 있는지 여부를 확인합니다. 만약 현재 위치가 안전하면 퀸을 배치하고 다음 행으로 이동합니다. 만약 모든 행에 퀸을 성공적으로 배치하면 해당 배치를 결과에 추가합니다.