Skip to content

Commit d87b7ed

Browse files
committed
house robber solution
1 parent 8fd6e1f commit d87b7ed

File tree

1 file changed

+73
-0
lines changed

1 file changed

+73
-0
lines changed

โ€Žhouse-robber/Yn3-3xh.java

Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
/*
2+
[๋ฌธ์ œํ’€์ด]
3+
(X) ์ฃผ์–ด์ง„ nums ๋ฐฐ์—ด์—์„œ index ํ™€์ˆ˜์˜ ํ•ฉ๊ณผ ์ง์ˆ˜์˜ ํ•ฉ์„ ๋น„๊ตํ•ด๋ณด์ž.
4+
class Solution {
5+
public int rob(int[] nums) {
6+
if (nums.length == 1) {
7+
return nums[0];
8+
}
9+
10+
for (int i = 1; i <= nums.length; i++) {
11+
int beforeStepIndex = i - 2;
12+
if (beforeStepIndex >= 1) {
13+
nums[i - 1] += nums[beforeStepIndex - 1];
14+
}
15+
}
16+
return Math.max(nums[nums.length - 1], nums[nums.length - 2]);
17+
}
18+
}
19+
>> ๋ฐ”๋กœ ์˜†์ด ์•„๋‹ˆ์–ด๋„ ๋œ๋‹ค.
20+
21+
(O) ํ˜„์žฌ num๊ณผ ์ด์ „ num์„ ๋น„๊ตํ•˜์—ฌ, ํฐ ๊ฐ’์„ ๊ธฐ์ค€์œผ๋กœ ๋”ํ•œ๋‹ค.
22+
time: O(N), space: O(1)
23+
class Solution {
24+
public int rob(int[] nums) {
25+
int prevNum = 0;
26+
int sum = 0;
27+
for (int num : nums) {
28+
int temp = Math.max(sum, prevNum + num);
29+
prevNum = sum;
30+
sum = temp;
31+
}
32+
return sum;
33+
}
34+
}
35+
>> ๊ณต๊ฐ„๋ณต์žก๋„ ์ตœ์ ํ™” ์†”๋ฃจ์…˜์œผ๋กœ, dp ๋ณด๋‹ค ์ง๊ด€์ ์ด์ง€ ์•Š์•„, ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ์ด ์ œํ•œ๋˜๊ฑฐ๋‚˜ ์ž…๋ ฅ ํฌ๊ธฐ๊ฐ€ ๋งค์šฐ ํด ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹์„ ๋“ฏ
36+
37+
time: O(N), space: O(N)
38+
class Solution {
39+
public int rob(int[] nums) {
40+
if (nums.length == 1) {
41+
return nums[0];
42+
}
43+
44+
int[] dp = new int[nums.length];
45+
dp[0] = nums[0];
46+
dp[1] = Math.max(nums[0], nums[1]);
47+
48+
for (int i = 2; i < nums.length; i++) {
49+
dp[i] = Math.max(dp[i - 1], dp[i - 2] + nums[i]);
50+
}
51+
return dp[nums.length - 1];
52+
}
53+
}
54+
>> ๊ณต๊ฐ„๋ณต์žก๋„๋Š” ์ข€ ๋” ๋†’์ง€๋งŒ, ์ง๊ด€์ ์ด๋‹ค.
55+
[ํšŒ๊ณ ]
56+
๊ฐœ๋ฐœ์€ ํ˜ผ์žํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๊ธฐ๋„ ํ•˜๊ณ , ๋””๋ฒ„๊น…ํ•˜๊ธฐ ์‰ฝ๊ฒŒ ์ง๊ด€์ ์ธ DP๋กœ ํ‘ธ๋Š”๊ฒŒ ์ข‹์ง€ ์•Š์„๊นŒ?..?
57+
*/
58+
class Solution {
59+
public int rob(int[] nums) {
60+
if (nums.length == 1) {
61+
return nums[0];
62+
}
63+
64+
int[] dp = new int[nums.length];
65+
dp[0] = nums[0];
66+
dp[1] = Math.max(nums[0], nums[1]);
67+
68+
for (int i = 2; i < nums.length; i++) {
69+
dp[i] = Math.max(dp[i - 1], dp[i - 2] + nums[i]);
70+
}
71+
return dp[nums.length - 1];
72+
}
73+
}

0 commit comments

Comments
ย (0)