์ฝ๋
class Solution {
// ์ฌ๊ท ๋ธ๋ฃจํธํฌ์ค
// public int rob(int[] nums) {
// return rob(nums, nums.length - 1);
// }
//
// public int rob(int[] nums, int n) {
// if (n < 0) {
// return 0;
// }
//
// // ์ด์ ๊ฒฐ๊ณผ
// return Math.max(rob(nums, n - 1), rob(nums, n - 2) + nums[n]);
// }
// DP
public int rob(int[] nums) {
// ์ ์ฝ์กฐ๊ฑด : 1 <= nums.length <= 100 -> ๋ฐฐ์ด ๊ธธ์ด 1์ด๋ฉด ๋ฐ๋ก ๋ฆฌํด
if (nums.length == 1) return nums[0];
int[] dp = new int[nums.length];
// DP -> ํ๋ทธ๋ ์ด์
dp[0] = nums[0]; // ์ฒซ ๋ฒ์งธ ์ง์ ํธ์์ ๋ ๊ธ์ก
dp[1] = Math.max(nums[0], nums[1]); // ๋ ๋ฒ์งธ ์ง๊น์ง์ ์ต๋ ๊ธ์ก
// ๋๋จธ์ง ์ง๋ค ์ต๋ ๊ธ์ก ๊ณ์ฐ (์ด์ ๊ฒฐ๊ณผ์ ์ ์ +ํ์ฌ ๊ฒฐ๊ณผ ์ค ๋ ํฐ ๊ฐ) ํ ์นธ ๋์์ ๊ณ์ฐํด์ผ ํ๋๊น!
for (int i = 2; i < nums.length; i++) {
dp[i] = Math.max(dp[i - 1], dp[i - 2] + nums[i]);
}
// ๋ง์ง๋ง ๊ฐ์ ๋ฆฌํด (์ต๋๊ฐ)
return dp[nums.length - 1];
}
}
Java
๋ณต์ฌ
๋ฌธ์ ํด๊ฒฐ ์์ด๋์ด
ํ๋ทธ๋ ์ด์
์ ํ์ฉํ DP๋ก ํ ์ ์๋ค.
์ ์ผ ๋จผ์ ๋น๊ตํด์ผ ํ๋ 0, 1๋ฒ ๊ฐ์ ๋ฏธ๋ฆฌ ๊ณ์ฐํ๋ค. ์ดํ ํ ์นธ ์ด์ ๋์์ ธ ์๋ ์ง์ ๋๋์ง ํ ์ ์๋ค๋ ์กฐ๊ฑด์ ๊ณ ๋ คํ์ฌ max ํจ์๋ก ๋น๊ตํ๋ฉด ์ฝ๊ฒ ํ์ด๊ฐ ๊ฐ๋ฅํ ๋ฌธ์ ์ด๋ค.