|  | 
|  | 1 | +/* | 
|  | 2 | +dp๋ฅผ ์ฌ์ฉ dp๋ฅผ ์ฌ์ฉํ๋ ์ด์ ๋ dfs๋ฅผ ํ  ๊ฒฝ์ฐ ์๊ฐ์ด๊ณผ๊ฐ ๋๋ฏ๋ก | 
|  | 3 | +๊ทธ๋ฆฌ๊ณ  i๋ฒ์งธ์ ์ต๋๊ฐ์ ์ฐพ๋ ๋ฌธ์ ๋ ์ ํ์์ผ๋ก ํํ์ด ๊ฐ๋ฅํ๋ฏ๋ก ์ ํ์์ผ๋ก ๋ํ๋ผ ์ ์์ผ๋ฉด dp๋ ํ์ฉ์ด ๊ฐ๋ฅํ๋ค. | 
|  | 4 | +์์ผ๋ก ๋ฐ๋ณต๋๋ ๋ฌธ์ ๊ฐ ์์ผ๋ฉด dp๋ฅผ ์ ๊ทน ํ์ฉํด๋ณด์. | 
|  | 5 | +
 | 
|  | 6 | +๊ฐ dp ๋ฐฐ์ด๋ค์ 1๋ฒ์งธ ์ง์ ๋ํด ์ด๊ธฐํ๋ฅผ ํด์ฃผ๊ณ  for ๋ฃจํ์ i=2๋ถํฐ ์์ํ๋๊ฒ ํฌ์ธํธ์๋ค. | 
|  | 7 | +nums[i]๋ก ์ ๊ทผํ์๋ IndexOutOfRange์๋ฌ๊ฐ ๋ฐ์ํ๋๊ฒ ์๋๊ฐ ์ถ์์ง๋ง 2๋ถํฐ ์์ํด์ ์ต๋๊ฐ์ด i๋ ๋ฐฐ์ด-1 ๊น์ง๋ค. | 
|  | 8 | +
 | 
|  | 9 | +dp1์ ์ฒซ๋ฒ์งธ์ง์ ๋ฐฉ๋ฌธํ์๋, dp2๋ ๋๋ฒ์งธ์ง์ ๋ฐฉ๋ฌธํ์๋์ด๋ฉฐ dp1์ ๋ง์ง๋ง์ง์ ๋ฐฉ๋ฌธํ์ง ๋ชปํ๋ค. | 
|  | 10 | +์ด ์กฐ๊ฑด์ i๊ฐ nums.length๋ณด๋ค ์์ ๊ฒฝ์ฐ๋ก ํ๋จํ๋ค. | 
|  | 11 | +
 | 
|  | 12 | +์ต์ข
 ์ต๋๊ฐ์ ๊ฐ dp ๋ฐฐ์ด์ ๋ง์ง๋ง ๊ทธ๋ฆฌ๊ณ  ๋ง์ง๋ง์์ 2๋ฒ์งธ์ ์ ์ฅ๋์ด์์ผ๋ฏ๋ก nums๋ฐฐ์ด ํฌ๊ธฐ - 1, -2 ํ ๊ฐ์ผ๋ก ์กฐํํ๋ค. | 
|  | 13 | +*/ | 
|  | 14 | + | 
|  | 15 | + | 
|  | 16 | +import java.util.*; | 
|  | 17 | + | 
|  | 18 | +class Solution { | 
|  | 19 | +    public int rob(int[] nums) { | 
|  | 20 | +        int[] dp1 = new int[nums.length]; | 
|  | 21 | +        int[] dp2 = new int[nums.length]; | 
|  | 22 | + | 
|  | 23 | +        if (nums.length == 1) { | 
|  | 24 | +            return nums[0]; | 
|  | 25 | +        } | 
|  | 26 | + | 
|  | 27 | +        dp1[0] = dp1[1] = nums[0]; | 
|  | 28 | +        dp2[1] = nums[1]; | 
|  | 29 | + | 
|  | 30 | +        for (int i=2; i<nums.length; i++) { | 
|  | 31 | +            if (i < nums.length) { | 
|  | 32 | +                dp1[i] = Math.max((nums[i] + dp1[i-2]), dp1[i-1]); | 
|  | 33 | +            } | 
|  | 34 | +            dp2[i] = Math.max((nums[i] + dp2[i-2]), dp2[i-1]); | 
|  | 35 | +        } | 
|  | 36 | + | 
|  | 37 | +        return Math.max(dp1[nums.length -2], dp2[nums.length -1]); | 
|  | 38 | +    } | 
|  | 39 | +} | 
|  | 40 | + | 
|  | 41 | + | 
|  | 42 | + | 
|  | 43 | + | 
|  | 44 | +// ์๋๋ dfs ๋ก ํผ ๋ฐฉ์ | 
|  | 45 | +// import java.util.*; | 
|  | 46 | + | 
|  | 47 | +// class Solution { | 
|  | 48 | +//     public int rob(int[] nums) { | 
|  | 49 | +//         if (nums == null || nums.length == 0) { | 
|  | 50 | +//             return 0; | 
|  | 51 | +//         } | 
|  | 52 | + | 
|  | 53 | +//         if (nums.length == 1) { | 
|  | 54 | +//             return nums[0]; | 
|  | 55 | +//         } | 
|  | 56 | + | 
|  | 57 | +//         return Math.max( | 
|  | 58 | +//             nums[0] + dfs(nums, 2, true), dfs(nums,1,false) | 
|  | 59 | +//         ); | 
|  | 60 | +         | 
|  | 61 | +//     } | 
|  | 62 | + | 
|  | 63 | +//     public int dfs(int[] nums, int idx, boolean first) { | 
|  | 64 | +//         // idx๊ฐ nums์ ๊ธธ์ด์ ๊ฐ๊ฑฐ๋ ํฌ๋ค๋ ๊ฒ์ ๋ฒ์๋ฅผ ์ด๊ณผํ๋ค๋ ์๋ฏธ์ด๋ฏ๋ก 0 return | 
|  | 65 | +//         if (idx >= nums.length) { | 
|  | 66 | +//             return 0; | 
|  | 67 | +//         } | 
|  | 68 | + | 
|  | 69 | +//         // idx๊ฐ nums์ ๋์ ๋๋ฌํ์ ๊ฒฝ์ฐ first์ ์ฌ๋ถ์ ๋ฐ๋ผ ๊ฒฐ๊ณผ๊ฐ์ด ๋ฐ๋๋ค. | 
|  | 70 | +//         if (idx == nums.length - 1) { | 
|  | 71 | +//             // ์ฒซ๋ฒ์งธ๋ฅผ ๋ฐฉ๋ฌธ์ ๋ง์ง๋ง์ ์ฌ์ฉ๋ถ๊ฐ | 
|  | 72 | +//             if (first) { | 
|  | 73 | +//                 return 0; | 
|  | 74 | +//             } else { | 
|  | 75 | +//                 return nums[nums.length - 1]; | 
|  | 76 | +//             } | 
|  | 77 | +//         } | 
|  | 78 | + | 
|  | 79 | +//         // ํ์ฌ ์ง์ ํธ์์๋ ํ์ฌ idx์ ๊ฐ๊ณผ ๋ค์ ์ง์ ํด ์ต๋๊ฐ | 
|  | 80 | +//         int curRob = nums[idx] + dfs(nums, idx + 2, first); | 
|  | 81 | +//         // ํ์ฌ ์ง์ ๊ฑด๋๋ธ๋ ๋ค์ idx์ ๊ฐ์ผ๋ก ๋ค์ ์ง์ ํด ์ต๋๊ฐ | 
|  | 82 | +//         int nextRob = dfs(nums, idx + 1, first); | 
|  | 83 | + | 
|  | 84 | +//         return Math.max(curRob, nextRob); | 
|  | 85 | +//     } | 
|  | 86 | +// } | 
|  | 87 | + | 
0 commit comments