2D 보드와 단어가 주어지면, 그리드에 단어가 존재하는지 찾으십시오. 단어는 순차적으로 인접한 셀의 문자로 구성될 수 있으며, 여기서 '인접' 셀은 수평 또는 수직으로 인접한 셀을 의미합니다.
설명: 이것은 백트래킹을 사용하는 깊이 우선 탐색(DFS)이 필요합니다. 각 셀을 반복합니다. 셀이 단어의 첫 번째 문자와 일치하면 DFS를 시작합니다. DFS 함수는 이웃을 확인하여 다음 문자와 일치하고 현재 경로에서 방문되지 않았는지 확인합니다. 경로가 실패하면 셀의 표시를 해제하여 백트랙합니다.
function exist(board, word) {
const rows = board.length;
const cols = board[0].length;
function dfs(r, c, index) {
if (index === word.length) return true; // Word found
if (r < 0 || c < 0 || r >= rows || c >= cols || board[r][c] !== word[index]) {
return false;
}
const temp = board[r][c];
board[r][c] = '#'; // Mark as visited
const found = dfs(r + 1, c, index + 1) ||
dfs(r - 1, c, index + 1) ||
dfs(r, c + 1, index + 1) ||
dfs(r, c - 1, index + 1);
board[r][c] = temp; // Backtrack
return found;
}
for (let r = 0; r < rows; r++) {
for (let c = 0; c < cols; c++) {
if (board[r][c] === word[0] && dfs(r, c, 0)) {
return true;
}
}
}
return false;
}
const board = [['A','B','C','E'],['S','F','C','S'],['A','D','E','E']];
console.log(exist(board, 'ABCCED')); // true
console.log(exist(board, 'SEE')); // true
console.log(exist(board, 'ABCB')); // false