|
| 1 | +class Solution { |
| 2 | + /* |
| 3 | + [1, i]μ λ²μμμ μ΅λκ°μ ꡬνκ³ μ ν λ, λ§μ½ [1, i-1]μ λ²μμμμ μ΅λκ°μ μ΄λ―Έ κ³μ°ν΄ λμλ€λ©΄ O(1)μ κ³μ°ν μ μλ€λ μμ΄λμ΄μμ μΆλ°ν©λλ€. |
| 4 | + λ¨, μ°μν΄μ λ μ§μμ νμΉ μ μλ€λ μ μ μ‘°κ±΄μ΄ μμΌλ―λ‘, i-1λ²μ§Έ μ§μμ νμΉ κ²½μ°μ νμΉμ§ μλ κ²½μ° κ°κ°μ λν μ΅λκ°μ λ°λ‘ ꡬν΄λμ΄μΌ ν©λλ€. |
| 5 | + dp[i-1][0]μλ i-1λ²μ§Έ μ§μμ νμΉμ§ μλ κ²½μ°μ μ΅λκ°, dp[i-1][1]μλ i-1λ²μ§Έ μ§μμ νμΉ κ²½μ°μ μ΅λκ°μ΄ μ μ₯λμ΄ μλ€λ μ μ νμ, |
| 6 | + dp[i][0], dp[i][1]μ μλμ κ°μ΄ ꡬν μ μμ΅λλ€. |
| 7 | +
|
| 8 | + 1) iλ²μ§Έ μ§μμ νμΉμ§ μλ κ²½μ°μ [1, i] λ²μμμμ μ΅λκ° |
| 9 | + iλ²μ§Έ μ§μμλ νμΉμ§ μμ κ²μ΄λ―λ‘, [1, i-1] λ²μμμμ μ΅λκ°μ΄ dp[i][0]μ΄ λ©λλ€. |
| 10 | + λ¨, μ¬κΈ°μ μ£Όμν μ μ dp[i-1][1]μ΄ λ¬΄μ‘°κ±΄ dp[i-1][0] μ΄μμ΄λΌκ³ μ°©κ°ν μ μλ€λ 건λ°μ, |
| 11 | + {100, 1, 1, 100} μμ dp[1][0] = 100, dp[1][1] = 1 μ΄λΌλ μΌμ΄μ€λ₯Ό μκ°ν΄λ³΄λ©΄, dp[i-1][0], dp[i-1][1]λ₯Ό λΉκ΅ν΄μ ν° κ²μ μ νν΄μΌ ν¨μ μ μ μμ΅λλ€. |
| 12 | +
|
| 13 | + 2) iλ²μ§Έ μ§μμ νμΉλ κ²½μ°μ [1, i] λ²μμμμ μ΅λκ° |
| 14 | + iλ²μ§Έ μ§μμ νμΉκΈ° μν΄μλ, i-1λ²μ§Έ μ§μμλ νμΉμ§ μμμ΄μΌλ§ ν©λλ€. |
| 15 | + λ°λΌμ λ¨μν dp[i][1] = dp[i-1][0] + nums[i] κ° λ©λλ€. |
| 16 | +
|
| 17 | + Runtime: 0 ms(Beats: 100.00 %) |
| 18 | + Time Complexity: O(n) |
| 19 | + - nums iteration : O(n) |
| 20 | +
|
| 21 | + Memory: 41.04 MB(Beats: 43.05 %) |
| 22 | + Space Complexity: O(n) |
| 23 | + - dp[n][2] : O(n) * 2 = O(n) |
| 24 | + */ |
| 25 | + public int rob(int[] nums) { |
| 26 | + int[][] dp = new int[nums.length][2]; |
| 27 | + |
| 28 | + dp[0][1] = nums[0]; |
| 29 | + for (int i = 1; i < nums.length; i++) { |
| 30 | + dp[i][0] = Math.max(dp[i - 1][0], dp[i - 1][1]); |
| 31 | + dp[i][1] = dp[i - 1][0] + nums[i]; |
| 32 | + } |
| 33 | + |
| 34 | + return Math.max(dp[nums.length - 1][0], dp[nums.length - 1][1]); |
| 35 | + } |
| 36 | + |
| 37 | + /* |
| 38 | + μκ°ν΄λ³΄λ memoization λ°°μ΄μ κ΅³μ΄ λ€κ³ λ€λ νμκ° μμ΄μ, |
| 39 | + νμν κ°(μ§μ μΈλ±μ€μμμ memoization κ°)λ§ μ μ₯νλλ‘ μμ ν΄μ κ³΅κ° λ³΅μ‘λλ₯Ό κ°μ νμ΅λλ€. |
| 40 | + κ·Έλ°λ°... λ¬΄μ¨ μ΄μ μμ μ§ μ€νλ € λ©λͺ¨λ¦¬ μ¬μ©λμ λ μ¦κ°νλ€κ³ λμ€λ€μ...? |
| 41 | +
|
| 42 | + Runtime: 0 ms(Beats: 100.00 %) |
| 43 | + Time Complexity: O(n) |
| 44 | + - nums iteration : O(n) |
| 45 | +
|
| 46 | + Memory: 41.21 MB(Beats: 22.01 %) |
| 47 | + Space Complexity: O(1) |
| 48 | + */ |
| 49 | + public int rob2(int[] nums) { |
| 50 | + int[] dp = new int[2]; |
| 51 | + |
| 52 | + dp[1] = nums[0]; |
| 53 | + for (int i = 1; i < nums.length; i++) { |
| 54 | + int tmp0 = Math.max(dp[0], dp[1]); |
| 55 | + int tmp1 = dp[0] + nums[i]; |
| 56 | + dp[0] = tmp0; |
| 57 | + dp[1] = tmp1; |
| 58 | + } |
| 59 | + |
| 60 | + return Math.max(dp[0], dp[1]); |
| 61 | + } |
| 62 | +} |
0 commit comments