Skip to content

Commit cc59421

Browse files
committed
Solve Word search 2
1 parent 01deda8 commit cc59421

File tree

2 files changed

+80
-12
lines changed

2 files changed

+80
-12
lines changed
Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
"""
2+
Constraints:
3+
- m == board.length
4+
- n == board[i].length
5+
- 1 <= m, n <= 12
6+
- board[i][j] is a lowercase English letter.
7+
- 1 <= words.length <= 3 * 10^4
8+
- 1 <= words[i].length <= 10
9+
- words[i] consists of lowercase English letters.
10+
- All the strings of words are unique.
11+
12+
Time Complexity: O(W * N * 4^L)
13+
- W๋Š” words์˜ ๊ฐœ์ˆ˜
14+
- N์€ board์˜ ๋ชจ๋“  cell (m * n)
15+
- L์€ word์˜ ๊ธธ์ด
16+
- ๊ฐ ๋‹จ์–ด๋งˆ๋‹ค Word Search 1์„ ๋ฐ˜๋ณต
17+
18+
Space Complexity: O(L)
19+
- L์€ word์˜ ๊ธธ์ด๋กœ, ์žฌ๊ท€ ํ˜ธ์ถœ ์Šคํƒ์˜ ๊นŠ์ด
20+
21+
Word search 1๊ณผ์˜ ์ฐจ์ด์ :
22+
- ๋‹จ์–ด ์—ฌ๋Ÿฌ๊ฐœ๋ฅผ ๋™์‹œ์— ์ฐพ์•„์•ผ ํ•จ
23+
- ์ฐพ์€ ๋ชจ๋“  ๋‹จ์–ด๋“ค์„ ๋ฆฌ์ŠคํŠธ๋กœ ๋ฐ˜ํ™˜ํ•ด์•ผ ํ•จ
24+
25+
ํ’€์ด๋ฐฉ๋ฒ•:
26+
- Word search 1๊ณผ ๋™์ผํ•œ ๋ฐฉ๋ฒ• + set(words)๋กœ ์ค‘๋ณต ์ œ๊ฑฐ
27+
28+
๋…ธํŠธ:
29+
- ์‹œ๊ฐ„์ดˆ๊ณผ๋กœ ํ†ต๊ณผ ์•ˆ ๋จ
30+
- Trie ์ž๋ฃŒ๊ตฌ์กฐ๋กœ ๋‹ค์‹œ ํ’€์–ด๋ณด๊ธฐ
31+
"""
32+
class Solution:
33+
def findWords(self, board: List[List[str]], words: List[str]) -> List[str]:
34+
words = list(set(words))
35+
result = []
36+
37+
def exist(word):
38+
rows, cols = len(board), len(board[0])
39+
40+
def dfs(i, j, k):
41+
if k == len(word):
42+
return True
43+
44+
if (i < 0 or i >= rows or
45+
j < 0 or j >= cols or
46+
board[i][j] != word[k]):
47+
return False
48+
49+
temp = board[i][j]
50+
board[i][j] = '#'
51+
52+
result = (dfs(i+1, j, k+1) or
53+
dfs(i-1, j, k+1) or
54+
dfs(i, j+1, k+1) or
55+
dfs(i, j-1, k+1))
56+
57+
board[i][j] = temp
58+
return result
59+
60+
for i in range(rows):
61+
for j in range(cols):
62+
if board[i][j] == word[0]:
63+
if dfs(i, j, 0):
64+
return True
65+
return False
66+
67+
for word in words:
68+
if exist(word):
69+
result.append(word)
70+
return result

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

Lines changed: 10 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -6,41 +6,39 @@
66
4. word length is between 1 and 15 inclusive
77
5. board and word contain only lowercase and uppercase English letters
88
9-
Time Complexity: O(N * 3^L)
9+
Time Complexity: O(N * 4^L)
1010
- N์€ board์˜ ๋ชจ๋“  cell (m * n)
1111
- L์€ word์˜ ๊ธธ์ด
12-
- ๊ฐ cell์—์„œ ์‹œ์ž‘ํ•˜์—ฌ word์˜ ๊ฐ ๊ธ€์ž๋งˆ๋‹ค ์„ธ๋ฐฉํ–ฅ์œผ๋กœ ํƒ์ƒ‰ (์ด๋ฏธ ๋ฐฉ๋ฌธํ•œ ๋ฐฉํ–ฅ ์ œ์™ธ)
12+
- ๊ฐ cell์—์„œ ์‹œ์ž‘ํ•˜์—ฌ word์˜ ๊ฐ ๊ธ€์ž๋งˆ๋‹ค ๋„ค๋ฐฉํ–ฅ์œผ๋กœ ํƒ์ƒ‰ (์ด๋ฏธ ๋ฐฉ๋ฌธํ•œ ๋ฐฉํ–ฅ ์ œ์™ธ)
1313
1414
Space Complexity: O(L)
1515
- L์€ word์˜ ๊ธธ์ด๋กœ, ์žฌ๊ท€ ํ˜ธ์ถœ ์Šคํƒ์˜ ๊นŠ์ด
16-
17-
To Do:
18-
- DFS์™€ ๋ฐฑํŠธ๋ž˜ํ‚น ๊ฐœ๋… ๋ณต์Šตํ•˜๊ธฐ
19-
- ๋‹ค๋ฅธ ์Šคํ„ฐ๋””์›๋ถ„๋“ค์˜ ๋‹ต์•ˆ ์ฐธ์กฐํ•˜์—ฌ ๋‹ค๋ฅธ ํ’€์ด๋ฐฉ๋ฒ• ๋ณต์Šตํ•˜๊ธฐ
2016
"""
2117

2218
class Solution:
2319
def exist(self, board: List[List[str]], word: str) -> bool:
2420
rows, cols = len(board), len(board[0])
2521

2622
def dfs(i, j, k):
23+
24+
# ๋‹จ์–ด๋ฅผ ๋ชจ๋‘ ์ฐพ์•˜์œผ๋ฉด True ๋ฐ˜ํ™˜
2725
if k == len(word):
2826
return True
2927

30-
if (i < 0 or i >= rows or
28+
if (i < 0 or i >= rows or # ๊ฒฝ๊ณ„์ฒดํฌ
3129
j < 0 or j >= cols or
32-
board[i][j] != word[k]):
30+
board[i][j] != word[k]): # ํ˜„์žฌ ๋ฌธ์ž๊ฐ€ ์ฐพ๋Š” ๋ฌธ์ž์™€ ๋‹ค๋ฆ„
3331
return False
3432

35-
temp = board[i][j]
36-
board[i][j] = '#'
33+
temp = board[i][j] # ํ˜„์žฌ ๋ฌธ์ž๋ฅผ ์ž„์‹œ์ €์žฅ
34+
board[i][j] = '#' # ๋ฐฉ๋ฌธ ํ‘œ์‹œ
3735

38-
result = (dfs(i+1, j, k+1) or
36+
result = (dfs(i+1, j, k+1) or # ์ƒํ•˜์ขŒ์šฐ ๋„ค ๋ฐฉํ–ฅ ํƒ์ƒ‰
3937
dfs(i-1, j, k+1) or
4038
dfs(i, j+1, k+1) or
4139
dfs(i, j-1, k+1))
4240

43-
board[i][j] = temp
41+
board[i][j] = temp # ๋ฐฑํŠธ๋ž˜ํ‚น (์›๋ž˜ ๋ฌธ์ž๋กœ ๋ณต์›)
4442
return result
4543

4644
for i in range(rows):

0 commit comments

Comments
ย (0)