๐Ÿƒ algorithm/leetcode

LeetCode 79 - Word Search (Medium)

HandHand 2021. 3. 3. 02:54

๋ฌธ์ œ

LeetCode - 79๋ฒˆ

ํ’€์ด ๊ณผ์ •

์ด์ฐจ์› ๋ฐฐ์—ด์—์„œ ์ธ์ ‘ํ•œ ๋ฌธ์ž๋“ค์„ ์ด์šฉํ•ด์„œ ํŠน์ • ๋‹จ์–ด๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š”์ง€ ํŒ๋‹จํ•˜๋Š” ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค.

๋ฐฑํŠธ๋ž˜ํ‚น ์„ ํ™œ์šฉํ•ด์„œ ๋ฌธ์ž๊ฐ€ ์ผ์น˜ํ•˜์ง€ ์•Š์œผ๋ฉด ๋‹ค์Œ ์œ„์น˜๋ฅผ ์ฐพ๋„๋ก ํƒ์ƒ‰์„ ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.
๋˜ํ•œ ์›ํ•˜๋Š” ๋‹จ์–ด๋ฅผ ์ฐพ์œผ๋ฉด ๋‹ค๋ฅธ ๋ฌธ์ž๋“ค์€ ํƒ์ƒ‰ํ•˜์ง€ ์•Š๊ณ  ๋ฐ”๋กœ 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;
};
๋ฐ˜์‘ํ˜•