|
1 | 1 | /**
|
2 | 2 | * Source: https://leetcode.com/problems/house-robber/
|
3 |
| - * νμ΄λ°©λ²: DPλ₯Ό μ΄μ©νμ¬ μ§μ νΈ λ μ΅λκ°μ κ΅¬ν¨ |
4 |
| - * μκ°λ³΅μ‘λ: O(n) |
5 |
| - * 곡κ°λ³΅μ‘λ: O(n) |
6 |
| - * |
7 |
| - * μκ°λλ νμ΄λ°©λ² |
| 3 | + * μμ : μΈμ ν μ§μ λ°©λ¬Ένμ§ μκ³ νμΉ μ μλ μ΅λ κΈμ‘μ κ³μ° |
| 4 | + * νμ΄ μκ°: 40λΆ |
| 5 | + * νμ΄λ°©λ²: DPλ₯Ό μ¬μ©νμ¬ μ΅μ μ ν΄κ²°μ±
μ κ΅¬ν¨ |
| 6 | + * μκ°λ³΅μ‘λ: O(n) - λ°°μ΄μ ν λ²λ§ μν |
| 7 | + * 곡κ°λ³΅μ‘λ: O(1) - μμ 곡κ°λ§ μ¬μ© (μ΅μ ν ν) |
8 | 8 | */
|
9 | 9 | function rob(nums: number[]): number {
|
10 |
| - if (nums.length === 0) return 0; |
11 |
| - if (nums.length === 1) return nums[0]; |
12 |
| - if (nums.length === 2) return Math.max(nums[0], nums[1]); |
| 10 | + // μ£μ§ μΌμ΄μ€ μ²λ¦¬ |
| 11 | + const n = nums.length; |
| 12 | + if (n === 0) return 0; |
| 13 | + if (n === 1) return nums[0]; |
13 | 14 |
|
14 |
| - let prev = nums[0]; |
15 |
| - let maxResult = Math.max(nums[0], nums[1]); |
16 |
| - let current = 0; |
| 15 | + // κ³΅κ° μ΅μ ν: μ 체 dp λ°°μ΄ λμ λ κ°μ λ³μλ§ μ¬μ© |
| 16 | + let prevTwo = nums[0]; // dp[i-2] |
| 17 | + let prevOne = Math.max(nums[0], nums[1]); // dp[i-1] |
17 | 18 |
|
18 |
| - // λ¨μ μ§μ μννλ©΄μ μ΅λκ°μ κ΅¬ν¨ |
19 |
| - for (let i = 2; i < nums.length; i++) { |
20 |
| - current = Math.max(maxResult, prev + nums[i]); |
21 |
| - prev = maxResult; |
22 |
| - maxResult = current; |
| 19 | + // i=2λΆν° μμνμ¬ μ΅μ μ κ° κ³μ° |
| 20 | + for (let i = 2; i < n; i++) { |
| 21 | + const current = Math.max( |
| 22 | + prevOne, // νμ¬ μ§μ 건λλ°λ κ²½μ° |
| 23 | + prevTwo + nums[i] // νμ¬ μ§μ νΈκ³ i-2 μμΉκΉμ§μ μ΅μ ν΄λ₯Ό λνλ κ²½μ° |
| 24 | + ); |
| 25 | + |
| 26 | + // λ€μ λ°λ³΅μ μν΄ κ° μ
λ°μ΄νΈ |
| 27 | + prevTwo = prevOne; |
| 28 | + prevOne = current; |
23 | 29 | }
|
24 |
| - return maxResult; |
| 30 | + |
| 31 | + return prevOne; |
25 | 32 | }
|
0 commit comments