Skip to content

Commit 7288a49

Browse files
committed
rivkode house robber ii
1 parent 2008b8f commit 7288a49

File tree

1 file changed

+87
-0
lines changed

1 file changed

+87
-0
lines changed
Lines changed: 87 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,87 @@
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

Comments
ย (0)