Skip to content

Commit d77d59d

Browse files
committed
79. Word Search
1 parent 441ac50 commit d77d59d

1 file changed

Lines changed: 52 additions & 0 deletions

File tree

โ€Žword-search/okyungjin.pyโ€Ž

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
# board: ์˜๋ฌธ ๋Œ€/์†Œ๋ฌธ์ž ๋ฐฐ์—ด, m * n
2+
# board์˜ ์ƒํ•˜์ขŒ์šฐ๋กœ ์ธ์ ‘ํ•œ ๋ฌธ์ž์—ด์„ ์ด์–ด๋ถ™์—ฌ์„œ word๋ฅผ ์™„์„ฑํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ์—ฌ๋ถ€๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
3+
# ๋‹จ, ์…€์€ ํ•œ๋ฒˆ๋งŒ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๋‹ค
4+
5+
# dfs๋ฅผ ํ†ตํ•ด ๋ฐฑํŠธ๋ž™ํ‚น์œผ๋กœ ์ •๋‹ต์„ ์ฐพ๋„๋ก ๊ตฌํ˜„ํ–ˆ๋‹ค.
6+
# TODO: ์‹œ๊ฐ„/๊ณต๊ฐ„ ๋ณต์žก๋„ ๊ณ„์‚ฐ
7+
class Solution:
8+
def exist(self, board: List[List[str]], word: str) -> bool:
9+
row_size = len(board)
10+
col_size = len(board[0])
11+
12+
# ๋ฐฉ๋ฌธ ์—ฌ๋ถ€๋ฅผ ๊ธฐ๋กํ•˜๋Š” 2์ฐจ์› ๋ฐฐ์—ด
13+
visited = [[False] * col_size for _ in range(row_size)]
14+
15+
def dfs(row, col, str_idx) -> bool:
16+
# ์ข…๋ฃŒ์กฐ๊ฑด1: ๋ณด๋“œ์˜ ์ขŒํ‘œ๋ฅผ ๋„˜์–ด๊ฐ€๋Š” ๊ฒฝ์šฐ
17+
if row < 0 or row >= row_size or col < 0 or col >= col_size:
18+
return False
19+
20+
# ์ข…๋ฃŒ์กฐ๊ฑด2: ์ด๋ฏธ ๋ฐฉ๋ฌธํ•œ ๊ฒฝ์šฐ
21+
if visited[row][col]:
22+
return False
23+
24+
# ์ข…๋ฃŒ์กฐ๊ฑด3: ๋ฌธ์ž์—ด ๋ถˆ์ผ์น˜
25+
if board[row][col] != word[str_idx]:
26+
return False
27+
28+
# ์ •๋‹ต ๋ฐœ๊ฒฌ ์‹œ ์ข…๋ฃŒ
29+
if str_idx + 1 == len(word):
30+
return True
31+
32+
visited[row][col] = True
33+
34+
# ์ฐจ๋ก€๋Œ€๋กœ ์ƒ, ํ•˜, ์ขŒ, ์šฐ์˜ ์ขŒํ‘œ๋ฅผ ํƒ์ƒ‰
35+
found = dfs(row - 1, col, str_idx + 1) or \
36+
dfs(row + 1, col, str_idx + 1) or \
37+
dfs(row, col - 1, str_idx + 1) or \
38+
dfs(row, col + 1, str_idx + 1)
39+
40+
visited[row][col] = False # ๋ฐฑํŠธ๋ž˜ํ‚น
41+
42+
return found
43+
44+
45+
# ์‹œ์ž‘์ ์„ ์ฐพ๋Š”๋‹ค
46+
for r in range(row_size):
47+
for c in range(col_size):
48+
# board[r][c] == word[0] ์ธ ์‹œ์ž‘์ ๋งŒ ํ˜ธ์ถœํ•˜๋„๋ก ํ•ด์„œ ์ตœ์ ํ™”
49+
if board[r][c] == word[0] and dfs(r, c, 0):
50+
return True
51+
52+
return False

0 commit comments

Comments
ย (0)