Skip to content

Commit a1bf24a

Browse files
Update taurus09318976.py
1 parent e3ec00c commit a1bf24a

File tree

1 file changed

+46
-68
lines changed

1 file changed

+46
-68
lines changed
Lines changed: 46 additions & 68 deletions
Original file line numberDiff line numberDiff line change
@@ -1,76 +1,54 @@
1-
# λ°±νŠΈλž˜ν‚Ή 방법을 μ‚¬μš©ν•˜μ—¬ 풀이함
21
class Solution:
3-
def exist(self, board: List[List[str]], word: str) -> bool:
4-
# λ³΄λ“œμ˜ ν–‰κ³Ό μ—΄ 수
5-
rows, cols = len(board), len(board[0])
6-
# λ°©λ¬Έν•œ 셀을 μΆ”μ ν•˜λŠ” μ§‘ν•©
7-
visited = set()
2+
#findMin λ©”μ„œλ“œλŠ” μ •μˆ˜ 리슀트λ₯Ό μž…λ ₯ λ°›μ•„ μ •μˆ˜λ₯Ό λ°˜ν™˜
3+
def findMin(self, nums: List[int]) -> int:
4+
# λ°°μ—΄μ˜ μ‹œμž‘κ³Ό 끝 인덱슀 μ„€μ •
5+
## leftλŠ” λ°°μ—΄μ˜ μ‹œμž‘ 인덱슀, rightλŠ” λ°°μ—΄μ˜ 끝 인덱슀. len(nums) - 1
6+
left, right = 0, len(nums) - 1
87

9-
# κΉŠμ΄μš°μ„  탐색(DFS) ν•¨μˆ˜ μ •μ˜
10-
#r, c은 ν˜„μž¬ μ…€μ˜ ν–‰κ³Ό μ—΄, iλŠ” ν˜„μž¬ μ°Ύκ³  μžˆλŠ” λ‹¨μ–΄μ˜ 인덱슀
11-
def dfs(r, c, i):
12-
#κΈ°λ³Έ 쑰건 확인
13-
# λ‹¨μ–΄μ˜ λͺ¨λ“  문자λ₯Ό 찾은 경우 성곡
14-
if i == len(word):
15-
return True
16-
17-
#μœΊνš¨μ„± 검사
18-
# λ²”μœ„λ₯Ό λ²—μ–΄λ‚˜κ±°λ‚˜ 이미 λ°©λ¬Έν–ˆκ±°λ‚˜ ν˜„μž¬ μ…€μ˜ λ¬Έμžκ°€ λ‹¨μ–΄μ˜ ν˜„μž¬ λ¬Έμžμ™€ μΌμΉ˜ν•˜μ§€ μ•ŠλŠ” 경우
19-
if (r < 0 or c < 0 or
20-
r >= rows or c >= cols or
21-
(r, c) in visited or
22-
board[r][c] != word[i]):
23-
return False
24-
25-
# ν˜„μž¬ 셀을 λ°©λ¬Έν–ˆλ‹€κ³  ν‘œμ‹œ
26-
visited.add((r, c))
27-
28-
# μƒν•˜μ’Œμš° λ°©ν–₯으둜 탐색
29-
result = (dfs(r + 1, c, i + 1) or # μ•„λž˜
30-
dfs(r - 1, c, i + 1) or # μœ„
31-
dfs(r, c + 1, i + 1) or # 였λ₯Έμͺ½
32-
dfs(r, c - 1, i + 1)) # μ™Όμͺ½
33-
34-
# λ°±νŠΈλž˜ν‚Ή: ν˜„μž¬ 셀을 λ°©λ¬Έν•˜μ§€ μ•Šμ€ κ²ƒμœΌλ‘œ ν‘œμ‹œ
35-
#ν˜„μž¬ κ²½λ‘œκ°€ μ‹€νŒ¨ν–ˆμœΌλ―€λ‘œ λ°©λ¬Έ ν‘œμ‹œ 제거
36-
visited.remove((r, c))
37-
38-
return result
8+
#μ™„μ „νžˆ μ •λ ¬λ˜μ–΄ 배열이 νšŒμ „λ˜μ§€ μ•Šμ€ 경우, 첫 번째 μš”μ†Œκ°€ μ΅œμ†Œκ°’
9+
if nums[left] < nums[right]:
10+
return nums[left]
3911

40-
# λ³΄λ“œμ˜ λͺ¨λ“  μ…€μ—μ„œ μ‹œμž‘μ μœΌλ‘œ μ‹œλ„
41-
for r in range(rows):
42-
for c in range(cols):
43-
if dfs(r, c, 0):
44-
return True
12+
# 이진 탐색 μ‹€ν–‰ : left < right인 λ™μ•ˆ 반볡되며, 검색 λ²”μœ„κ°€ 1개 μ΄μƒμ˜ μš”μ†Œλ₯Ό 포함할 λ•ŒκΉŒμ§€ 계속됨
13+
while left < right:
14+
# 쀑간 인덱슀 계산 : 쀑간값과 였λ₯Έμͺ½ 끝값 비ꡐ ν›„, 비ꡐ 결과에 따라 검색 λ²”μœ„ μ‘°μ •
15+
mid = (left + right) // 2
16+
17+
# 쀑간값이 였λ₯Έμͺ½ 값보닀 큰 경우
18+
# -> μ΅œμ†Œκ°’μ€ 쀑간값 였λ₯Έμͺ½μ— 있음
19+
if nums[mid] > nums[right]:
20+
left = mid + 1
21+
# 쀑간값이 였λ₯Έμͺ½ 값보닀 μž‘κ±°λ‚˜ 같은 경우
22+
# -> μ΅œμ†Œκ°’μ€ 쀑간값 포함 μ™Όμͺ½μ— 있음
23+
else:
24+
right = mid
4525

46-
return False
26+
# μ΅œμ’…μ μœΌλ‘œ 찾은 μ΅œμ†Œκ°’ λ°˜ν™˜
27+
return nums[left]
28+
29+
# ν…ŒμŠ€νŠΈ μ½”λ“œ
30+
print(Solution().findMin([3, 4, 5, 1, 2])) # 좜λ ₯: 1
31+
print(Solution().findMin([4, 5, 6, 7, 0, 1, 2])) # 좜λ ₯: 0
32+
print(Solution().findMin([1])) # 좜λ ₯: 1
33+
34+
35+
#μ‹œκ°„ λ³΅μž‘λ„ (Time Complexity): O(log n)
36+
#이유:
37+
#이진 탐색 μ•Œκ³ λ¦¬μ¦˜ μ‚¬μš©
38+
#각 λ‹¨κ³„λ§ˆλ‹€ 검색 λ²”μœ„κ°€ 절반으둜 쀄어듦
39+
#n개의 μš”μ†Œλ₯Ό logβ‚‚n 번의 λΉ„κ΅λ‘œ 검색
40+
#μ˜ˆμ‹œ:
41+
#n = 8: μ΅œλŒ€ 3번의 비ꡐ (logβ‚‚8 = 3)
42+
#n = 16: μ΅œλŒ€ 4번의 비ꡐ (logβ‚‚16 = 4)
43+
#λ”°λΌμ„œ μ‹œκ°„ λ³΅μž‘λ„λŠ” O(log n)
44+
#곡간 λ³΅μž‘λ„ (Space Complexity): O(1)
45+
#이유:
46+
#좔가적인 데이터 ꡬ쑰 μ‚¬μš©ν•˜μ§€ μ•ŠμŒ
47+
#μ‚¬μš©ν•˜λŠ” λ³€μˆ˜:
48+
#left, right, mid: μƒμˆ˜ 개수의 μ •μˆ˜ λ³€μˆ˜
49+
#μž…λ ₯ 크기와 관계없이 μΌμ •ν•œ λ©”λͺ¨λ¦¬λ§Œ μ‚¬μš©
50+
#λ”°λΌμ„œ 곡간 λ³΅μž‘λ„λŠ” O(1)
4751

48-
#μ‹œκ°„ λ³΅μž‘λ„ (Time Complexity): O(m * n * 4^L)
49-
#m: λ³΄λ“œμ˜ ν–‰ 수
50-
#n: λ³΄λ“œμ˜ μ—΄ 수
51-
#L: λ‹¨μ–΄μ˜ 길이
52-
#이유:
53-
#각 μ…€μ—μ„œ μ‹œμž‘ν•  수 있음: O(m * n)
54-
#각 μœ„μΉ˜μ—μ„œ 4λ°©ν–₯으둜 탐색 κ°€λŠ₯: O(4^L)
55-
#μ΅œμ•…μ˜ 경우 λͺ¨λ“  경둜λ₯Ό 탐색해야 함
56-
#λ”°λΌμ„œ μ‹œκ°„ λ³΅μž‘λ„λŠ” O(m * n * 4^L)
57-
#곡간 λ³΅μž‘λ„ (Space Complexity): O(L)
58-
#L: λ‹¨μ–΄μ˜ 길이
59-
#이유:
60-
#μž¬κ·€ 호좜 μŠ€νƒμ˜ κΉŠμ΄λŠ” λ‹¨μ–΄μ˜ 길이에 λΉ„λ‘€
61-
#visited μ§‘ν•©μ˜ 크기도 λ‹¨μ–΄μ˜ 길이에 λΉ„λ‘€
62-
#λ”°λΌμ„œ 곡간 λ³΅μž‘λ„λŠ” O(L)
63-
#DFS vs BFS 비ꡐ:
64-
#DFS (깊이 μš°μ„  탐색):
65-
#ν•œ 경둜λ₯Ό λκΉŒμ§€ 탐색
66-
#μŠ€νƒ/μž¬κ·€ μ‚¬μš©
67-
#λ©”λͺ¨λ¦¬ μ‚¬μš©μ΄ 적음
68-
#μ΅œλ‹¨ 경둜 보μž₯ν•˜μ§€ μ•ŠμŒ
69-
#BFS (λ„ˆλΉ„ μš°μ„  탐색):
70-
#같은 레벨의 λͺ¨λ“  λ…Έλ“œλ₯Ό λ¨Όμ € 탐색
71-
#큐 μ‚¬μš©
72-
#λ©”λͺ¨λ¦¬ μ‚¬μš©μ΄ 많음
73-
#μ΅œλ‹¨ 경둜 보μž₯
7452

7553

7654

0 commit comments

Comments
Β (0)