Manduss life
[Python][backtracking] Word Search - LeetCode #79 본문
[문제]
[느낀점 / 깨달은점]
- Backtracking 문제이다.
- 방문체크 배열을 재귀함수의 내부 재귀함수로 들어갈 때마다 deep copy를 해주었는데, 이렇게 하면 Time Limit !
- deep copy보다는 하나의 방문체크 배열을 사용하고, 내부 재귀함수 후 False(방문하지 않음)로 돌려주는 방법.
- feat. binue
[코드]
class Solution:
result = False
def exist(self, board: List[List[str]], word: str) -> bool:
def print_2d( a):
for i in a :
for j in i:
print(j, end=' ')
print()
def back_tracking(i, j, num, is_used):
if num == len(word):
self.result = True
return
for n in range(4):
ii = i + dy[n]
jj = j + dx[n]
if ii < 0 or jj < 0 or ii >= H or jj >= W or is_used[ii][jj]:
continue
if board[ii][jj] == word[num] :
import copy
# is_used_temp = copy.deepcopy(is_used)
# is_used_temp[ii][jj] = True
# back_tracking(ii, jj, num+1, is_used_temp)
is_used[ii][jj] = True
back_tracking(ii, jj, num+1, is_used)
is_used[ii][jj] = False
num = 0
H = len(board)
W = len(board[0])
dy = [-1, 1, 0, 0]
dx = [0, 0, -1, 1]
is_used = [[False for _ in range(W)] for _ in range(H)]
for i in range(H):
for j in range(W):
if board[i][j] == word[0]:
is_used[i][j] = True
back_tracking(i, j, 1, is_used)
if self.result :
return True
is_used[i][j] = False
return False
'전산 > Algorithm' 카테고리의 다른 글
[Python][Graph] 양과 늑대 - 프로그래머스 (0) | 2023.01.05 |
---|---|
[Python][DP] 가장 큰 정사각형 찾기 - 프로그래머스 lv.2(다시 풀어보자) (0) | 2023.01.02 |
백준 2150 풀기 (0) | 2022.11.05 |
[Python][BinarySearch] 코딩 테스트 세트 - softeer (2) | 2022.10.28 |
[Python][DFS] 빙산 - BJ 2573 (1) | 2022.10.13 |
Comments