|
1 |
| -from typing import List |
2 |
| - |
3 |
| - |
4 | 1 | class Solution:
|
5 | 2 | def rob(self, nums: List[int]) -> int:
|
6 |
| - house_length = len(nums) |
| 3 | + # μμΈ μ²λ¦¬: μ§μ΄ 2κ° μ΄νμΌ κ²½μ° κ·Έ μ€ ν° κ°μ΄ μ΅λ λλμ§ κΈμ‘ |
| 4 | + if len(nums) < 3: |
| 5 | + return max(nums) |
| 6 | + |
| 7 | + # DP(Dynamic Programming)λ₯Ό μν λ©λͺ¨μ΄μ μ΄μ
λ°°μ΄ |
| 8 | + # memo[0]: 첫 λ²μ§Έ μ§κΉμ§ κ³ λ €νμ λ μ΅λ λλμ§ κΈμ‘ |
| 9 | + # memo[1]: λ λ²μ§Έ μ§κΉμ§ κ³ λ €νμ λ μ΅λ λλμ§ κΈμ‘ |
| 10 | + memo = [nums[0], max(nums[0], nums[1])] |
7 | 11 |
|
8 |
| - if house_length == 0: |
9 |
| - return 0 |
10 |
| - if house_length == 1: |
11 |
| - return nums[0] |
12 |
| - if house_length == 2: |
13 |
| - return max(nums[0], nums[1]) |
| 12 | + # μΈ λ²μ§Έ μ§λΆν° μμ°¨μ μΌλ‘ λλμ§ μλλ¦¬μ€ κ²ν |
| 13 | + # λ§€ μ§λ§λ€ λ κ°μ§ μ νμ΄ μμ: νμ¬ μ§μ νΈκ±°λ vs νΈμ§ μκ±°λ |
| 14 | + for num in nums[2:]: |
| 15 | + # νμ¬ μ§μ νΈ κ²½μ°: νμ¬ μ§ κΈμ‘ + μ μ μ§κΉμ§μ μ΅λ κΈμ‘ |
| 16 | + # (μΈμ ν μ§μ νΈ μ μμΌλ―λ‘ λ°λ‘ μ΄μ μ§μ 건λλ) |
| 17 | + robbed = memo[0] + num |
14 | 18 |
|
15 |
| - dp = [nums[0], max(nums[0], nums[1])] |
| 19 | + # νμ¬ μ§μ νΈμ§ μλ κ²½μ°: μ΄μ μ§κΉμ§μ μ΅λ κΈμ‘μ κ·Έλλ‘ μ μ§ |
| 20 | + not_robbed = memo[1] |
16 | 21 |
|
17 |
| - for index in range(2, house_length): |
18 |
| - dp.append(max(dp[index - 1], dp[index - 2] + nums[index])) |
| 22 | + # λ©λͺ¨μ΄μ μ΄μ
λ°°μ΄ μ
λ°μ΄νΈ |
| 23 | + # λ€μ λ°λ³΅μ μν΄ memo[0]μ μ΄μ κΉμ§μ μ΅λκ°μΌλ‘ κ°±μ |
| 24 | + memo[0] = memo[1] |
| 25 | + # memo[1]μ νμ¬κΉμ§μ μ΅λκ°(νμ¬ μ§μ νΈκ±°λ μ νΈκ±°λ μ€ λ ν° κ°)μΌλ‘ κ°±μ |
| 26 | + memo[1] = max(robbed, not_robbed) |
19 | 27 |
|
20 |
| - return dp[-1] |
| 28 | + # λ§μ§λ§ μ§κΉμ§ κ³ λ €νμ λμ μ΅λ λλμ§ κΈμ‘ λ°ν |
| 29 | + return memo[1] |
0 commit comments