[JS] Word Search

2022. 9. 2. 01:22

🔒 문제 (LeetCode 79)

Given an m x n grid of characters board and a string word, return true if word exists in the grid.

The word can be constructed from letters of sequentially adjacent cells, where adjacent cells are horizontally or vertically neighboring. The same letter cell may not be used more than once.

Constraints:

  • m == board.length
  • n = board[i].length
  • 1 <= m, n <= 6
  • 1 <= word.length <= 15
  • board and word consists of only lowercase and uppercase English letters.

Follow up: Could you use search pruning to make your solution faster with a larger board?

 

🌊 입출력

Example 1:

Input: board = [["A","B","C","E"],["S","F","C","S"],["A","D","E","E"]], word = "ABCCED"
Output: true

Example 2:

Input: board = [["A","B","C","E"],["S","F","C","S"],["A","D","E","E"]], word = "SEE"
Output: true

Example 3:

Input: board = [["A","B","C","E"],["S","F","C","S"],["A","D","E","E"]], word = "ABCB"
Output: false

 


 

🔑 해결

🌌 알고리즘 - Backtracking

/**
 * @param {character[][]} board
 * @param {string} word
 * @return {boolean}
 */
var exist = function(board, word) {
    if(board.length === 0) return false
    
    const [m, n] = [board.length, board[0].length]
    const dir = [[1, 0], [-1, 0], [0, 1], [0, -1]]
    
    const backtracking = (r, c, idx) => {
        if(board[r][c] !== word[idx]) return false
        if(idx === word.length - 1) return true
        
        board[r][c] = '*'
        
        for(const [x, y] of dir) {
            const [nr, nc] = [r + x, c + y]
            if(nr >= 0 && nr < m && nc >= 0 && nc < n) {
                if(backtracking(nr, nc, idx + 1)) return true
            }
        }
        
        board[r][c] = word[idx]
        return false
    }
    
    for(let i = 0; i < m; i++) {
        for(let j = 0; j < n; j++) {
            if(backtracking(i, j, 0)) return true
        }
    }
    
    return false
};

'코딩테스트 (JS) > DFS | BFS' 카테고리의 다른 글

[JS] Course Schedule  (0) 2022.10.09
[JS] Pacific Atlantic Water Flow  (0) 2022.10.07
[JS] Generate Parentheses  (0) 2022.09.01
[JS] Letter Combinations of a Phone Number  (0) 2022.09.01
[JS] Combination Sum II  (0) 2022.08.31

+ Recent posts