|
1 |
| -# λ°±νΈλνΉ λ°©λ²μ μ¬μ©νμ¬ νμ΄ν¨ |
2 | 1 | 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 |
8 | 7 |
|
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] |
39 | 11 |
|
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 |
45 | 25 |
|
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) |
47 | 51 |
|
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 |
| - #μ΅λ¨ κ²½λ‘ λ³΄μ₯ |
74 | 52 |
|
75 | 53 |
|
76 | 54 |
|
0 commit comments