접근
- 항상 리스트 자료형을 활용할 때에는 조심해야 한다.
- 대중적인 접근법을 사용해서 문제 풀이, 가능 여부와 관계없이 선행 탐색 후 올바르지 않는 경우를 조건문을 통해 거르는 로직 진행
- 백트래킹 함수 구현 시 boolean 형을 리턴하는 방식을 추천, 괜찮은 테크닉을 구현할 수 있다.
문제
https://leetcode.com/problems/word-search/description/
솔루션
class Solution:
def exist(self, board: List[List[str]], word: str) -> bool:
ROW_length = len(board)
COL_length = len(board[0])
WORD_length = len(word)
def backtrack(ROW, COL, index, visited):
if ROW < 0 or ROW > ROW_length-1 or COL < 0 or COL > COL_length-1 \
or visited[ROW][COL] or word[index] != board[ROW][COL]:
return False
if index == WORD_length-1:
return True
visited[ROW][COL] = True
if backtrack(ROW+1, COL, index+1, visited) or \
backtrack(ROW, COL+1, index+1, visited) or \
backtrack(ROW-1, COL, index+1, visited) or \
backtrack(ROW, COL-1, index+1, visited):
return True
visited[ROW][COL] = False
return False
# only check whether this char is
# firs char of the given word
for r in range(ROW_length):
for c in range(COL_length):
if board[r][c] == word[0]:
visited = [[False for _ in range(COL_length)] \
for _ in range(ROW_length)]
if backtrack(r, c, 0, visited):
return True
return False
'컴퓨터공학 & 정보통신 > 알고리즘 문제 풀이' 카테고리의 다른 글
[LeetCode] 55. Jump Game (0) | 2023.04.03 |
---|---|
[LeetCode] 36. Valid Sudoku (0) | 2023.03.31 |
[LeetCode] 200. Number of Islands (0) | 2023.03.26 |
[LeetCode] 463. Island Perimeter (0) | 2023.03.25 |
[LeetCode] 131. Palindrome Partitioning (0) | 2023.03.23 |