[LeetCode]Word Search

2023. 5. 30. 22:21·SW개발/코딩테스트

https://leetcode.com/problems/word-search/

 

Word Search - LeetCode

Can you solve this real interview question? Word Search - 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 h

leetcode.com

 

문제 분석

주어진 board를 수평, 수직으로 이동하면서 탐색할 때 word를 만들 수 있는지를 구하는 문제입니다.

 

처음 시도한 답안

class Solution:
    def exist(self, board: List[List[str]], word: str) -> bool:
        row = len(board)
        col = len(board[0])
        path = set()

        def dfs(i, j, word_idx):
            # 단어를 찾은 경우, 아래의 조건문에서 필터링 되지 않으면 단어를 찾은 것
            if word_idx == len(word):
                return True

            # Grid의 위치를 벗어나거나 or 단어가 다르거나 or 이미 방문한 포인트라면 False
            if i < 0 or j < 0 or i >= row or j >= col or word[word_idx] != board[i][j] or (i, j) in path:
                return False
                
            # 방문 경로 추가
            path.add((i,j))

            # 4방향으로 탐색하는 과정, 하나의 케이스라도 True 이면 단어를 찾은 것
            res = (
                dfs(i, j+1, word_idx+1) or
                dfs(i+1, j, word_idx+1) or
                dfs(i, j-1, word_idx+1) or
                dfs(i-1, j, word_idx+1)
            )
            
            # 방문 경로 제거
            path.remove((i, j))

            return res

        # Grid를 순회하면서 dfs 수행
        for r in range(row):
            for c in range(col):
                # 시작 글자가 word의 시작글자가 동일한 경우에만 dfs를 수행
                if board[r][c] == word[0] and dfs(r, c, 0):
                    return True

        return False

접근 방법

  1. dfs를 이용해 4가지 방향으로 탐색합니다.
  2. dfs 내부에서
    1. 단어를 찾은 경우라면 True를 return 합니다.
    2. 4가지 방향을 탐색하다가 Grid의 위치를 벗어난 경우 or 단어가 틀린 경우 or 이미 방문한 위치라면(중복 탐색x) False를 return 합니다.
    3. 방문한 좌표를 path(set)에 추가합니다.
    4. 4가지 방향에 대해 dfs를 재귀적으로 호출하도록 합니다. 호출한 결과중 하나라도 True 이면 단어를 찾은 것입니다.
    5. 방문한 경로를 제거합니다.
    6. 마지막으로 res를 return 합니다. 
  3. Grid를 이중 순회하면서 dfs를 수행하도록 합니다.
    1. 단, 시작 글자가 word의 시작 글자와 동일한 경우에만 수행합니다.
    2. word를 발견하게 되면 True를 return 합니다.
  4. 발견할 수 없다면 False를 return 합니다.

기본적으로 word를 만들어가는 과정은 DFS를 이용합니다. 다만, 4가지 방향으로 탐색하는 것과 그에 따른 여러가지 탈출 조건을 고려해내는 것이 어려웠던 문제입니다. 

 

728x90

'SW개발 > 코딩테스트' 카테고리의 다른 글

[LeetCode]Binary Tree Level Order Traversal  (0) 2023.06.01
[LeetCode]Validate Binary Search Tree  (0) 2023.05.31
[LeetCode]Subsets  (0) 2023.05.29
[LeetCode]Sort Colors  (0) 2023.05.28
[LeetCode]Search a 2D Matrix  (0) 2023.05.27
'SW개발/코딩테스트' 카테고리의 다른 글
  • [LeetCode]Binary Tree Level Order Traversal
  • [LeetCode]Validate Binary Search Tree
  • [LeetCode]Subsets
  • [LeetCode]Sort Colors
Leffe_pt
Leffe_pt
개발자로서 성장하면서 배워온 지식과 경험을 공유하는 공간입니다.
  • Leffe_pt
    Leffe's tistory
    Leffe_pt
  • 전체
    오늘
    어제
    • 분류 전체보기 (309)
      • SW개발 (305)
        • 코딩테스트 (172)
        • 개발이야기 (23)
        • IT 용어 (17)
        • Python (22)
        • Django (46)
        • Flask (2)
        • Database (3)
        • SQLAlchemy (0)
        • Javascript (5)
        • Linux, Unix (3)
        • JAVA (2)
        • Spring (10)
      • 회고 (4)
      • 사진 (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    g
    컨트리뷰터
    django
    트리 #AVL #알고리즘 #자료구조
    플레이스토어
    오픈소스
    어플리케이션
    배달
    배달비 공유
    음식
    Contributor
    라이프 스타일
    배공파용
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
Leffe_pt
[LeetCode]Word Search
상단으로

티스토리툴바