|
| 1 | +/** |
| 2 | + * μκ°λ³΅μ‘λ: O(n) - λ°°μ΄μ ν λ²λ§ μν |
| 3 | + * 곡κ°λ³΅μ‘λ: O(n) - κΈΈμ΄κ° n+1μΈ DP λ°°μ΄ μ¬μ© |
| 4 | + * |
| 5 | + * @param {number[]} nums |
| 6 | + * @return {number} |
| 7 | + */ |
| 8 | +var rob = function (nums) { |
| 9 | + // arr[i] = iλ²μ§Έ μ§λΆν° λ§μ§λ§ μ§κΉμ§ κ³ λ €νμ λ νμΉ μ μλ μ΅λ κΈμ‘ |
| 10 | + const arr = new Array(nums.length + 1); |
| 11 | + |
| 12 | + // μ‘΄μ¬νμ§ μλ μ§(n+1λ²μ§Έ)μ 0, μ νμμ μν κ³μ°μ© 곡κ°μ |
| 13 | + arr[nums.length] = 0; |
| 14 | + |
| 15 | + // λ§μ§λ§ μ§λ§ κ³ λ €νλ©΄ κ·Έ μ§μ κΈμ‘μ΄ μ΅λκ° (μ΄ν μ§λ€μ μμΌλκΉ 0μΌλ‘ κ³μ°ν κ²°κ³Ό) |
| 16 | + arr[nums.length - 1] = nums[nums.length - 1]; |
| 17 | + |
| 18 | + // λ€μμλΆν° κ³μ° |
| 19 | + for (let i = nums.length - 2; i >= 0; i--) { |
| 20 | + // iλ²μ§Έ μ§μμμ κ²°μ : |
| 21 | + // 1. iλ²μ§Έ μ§μ νΈκ³ (i+2)λ²μ§Έ μ§λΆν° νμΉλ κ²½μ°: nums[i] + arr[i+2] |
| 22 | + // 2. iλ²μ§Έ μ§μ νΈμ§ μκ³ (i+1)λ²μ§Έ μ§λΆν° νμΉλ κ²½μ°: arr[i+1] |
| 23 | + // λ κ°μ§ μ€ μ΅λκ°μ μ ν |
| 24 | + arr[i] = Math.max(nums[i] + arr[i + 2], arr[i + 1]); |
| 25 | + } |
| 26 | + |
| 27 | + // arr[0]μ 0λ²μ§Έ μ§λΆν° κ³ λ €νμ λ νμΉ μ μλ μ΅λ κΈμ‘ |
| 28 | + return arr[0]; |
| 29 | +}; |
| 30 | + |
| 31 | +/* νμ΄ μ€λͺ
: |
| 32 | + * λ¬Έμ μ ν΅μ¬: μΈμ ν μ§μ μ°μν΄μ νΈ μ μμ λ μ΅λλ‘ νΈ μ μλ κΈμ‘ μ°ΎκΈ° |
| 33 | + * |
| 34 | + * μ κ·Ό λ°©μ: λ€μ΄λλ―Ή νλ‘κ·Έλλ° |
| 35 | + * |
| 36 | + * 1. μν μ μ: |
| 37 | + * - f(n) = nλ²μ§Έ μ§λΆν° λ§μ§λ§ μ§κΉμ§ κ³ λ €νμ λ νΈ μ μλ μ΅λ κΈμ‘ |
| 38 | + * |
| 39 | + * 2. μ νμ λμΆ: |
| 40 | + * - κ° μ§λ§λ€ λ κ°μ§ μ νμ΄ μμ: |
| 41 | + * 1) νμ¬ μ§μ νΈκΈ°: νμ¬ μ§μ λ + λ μ§ μ΄νλΆν°μ μ΅λ κΈμ‘ |
| 42 | + * 2) νμ¬ μ§μ νΈμ§ μκΈ°: λ€μ μ§λΆν°μ μ΅λ κΈμ‘ |
| 43 | + * - λ°λΌμ μ νμ: f(n) = max(nums[n] + f(n+2), f(n+1)) |
| 44 | + * |
| 45 | + * 3. λ² μ΄μ€ μΌμ΄μ€: |
| 46 | + * - μ‘΄μ¬νμ§ μλ μ§: f(n+1) = 0 |
| 47 | + * - λ§μ§λ§ μ§: f(n) = nums[n] |
| 48 | + * |
| 49 | + * 4. κ³μ° λ°©ν₯: |
| 50 | + * - λ€μμλΆν° μμΌλ‘ κ³μ° (Bottom-up) |
| 51 | + * - λ§μ§λ§ μ§λΆν° μμν΄μ 첫 λ²μ§Έ μ§κΉμ§ κ° μμΉμμμ μ΅λ κΈμ‘ κ³μ° |
| 52 | + * |
| 53 | + * μμ [1,2,3,1]: |
| 54 | + * - f(4) = 0 (μ‘΄μ¬νμ§ μλ μ§) |
| 55 | + * - f(3) = 1 (λ§μ§λ§ μ§) |
| 56 | + * - f(2) = max(3 + f(4), f(3)) = max(3 + 0, 1) = 3 |
| 57 | + * - f(1) = max(2 + f(3), f(2)) = max(2 + 1, 3) = 3 |
| 58 | + * - f(0) = max(1 + f(2), f(1)) = max(1 + 3, 3) = 4 |
| 59 | + * - κ²°κ³Ό: 4 (μ΅μ μ μ νμ 0λ²μ§Έμ 2λ²μ§Έ μ§ νΈκΈ°) |
| 60 | + */ |
0 commit comments