๐ algorithm/leetcode
LeetCode 79 - Word Search (Medium)
HandHand
2021. 3. 3. 02:54
๋ฌธ์
ํ์ด ๊ณผ์
์ด์ฐจ์ ๋ฐฐ์ด์์ ์ธ์ ํ ๋ฌธ์๋ค์ ์ด์ฉํด์ ํน์ ๋จ์ด๋ฅผ ๋ง๋ค ์ ์๋์ง ํ๋จํ๋ ๋ฌธ์ ์
๋๋ค. ๋ฐฑํธ๋ํน
์ ํ์ฉํด์ ๋ฌธ์๊ฐ ์ผ์นํ์ง ์์ผ๋ฉด ๋ค์ ์์น๋ฅผ ์ฐพ๋๋ก ํ์์ ํ๋ฉด ๋ฉ๋๋ค.
๋ํ ์ํ๋ ๋จ์ด๋ฅผ ์ฐพ์ผ๋ฉด ๋ค๋ฅธ ๋ฌธ์๋ค์ ํ์ํ์ง ์๊ณ ๋ฐ๋ก true
๋ฅผ ๋ฐํํ๋๋ก ํ์์ต๋๋ค.
์ฝ๋
/**
* @param {character[][]} board
* @param {string} word
* @return {boolean}
*/
var exist = function (board, word) {
const dx = [0, 0, 1, -1];
const dy = [1, -1, 0, 0];
function dfs(x, y, depth, visit) {
if (board[x][y] !== word[depth]) return false;
else if (depth === word.length - 1) return true;
for (let i = 0; i < 4; i++) {
const nx = x + dx[i],
ny = y + dy[i];
if (0 <= nx && nx < board.length && 0 <= ny && ny < board[0].length) {
if (!visit[nx][ny]) {
visit[nx][ny] = 1;
if (dfs(nx, ny, depth + 1, visit)) return true;
visit[nx][ny] = 0;
}
}
}
return false;
}
for (let x = 0; x < board.length; x++) {
for (let y = 0; y < board[0].length; y++) {
if (board[x][y] === word[0]) {
const visit = new Array(board.length)
.fill(0)
.map((_) => new Array(board[0].length).fill(0));
visit[x][y] = 1;
if (dfs(x, y, 0, visit)) return true;
visit[x][y] = 0;
}
}
}
return false;
};
๋ฐ์ํ