Skip to content

Commit 71404ea

Browse files
committed
Solution 3
1 parent 8246585 commit 71404ea

File tree

1 file changed

+72
-0
lines changed

1 file changed

+72
-0
lines changed

โ€Žhouse-robber/flynn.go

Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
/*
2+
ํ’€์ด 1
3+
- DP๋ฅผ ์ด์šฉํ•˜์—ฌ ํ’€์ดํ•ฉ๋‹ˆ๋‹ค
4+
์•„๋ž˜ ๋ฐฐ์—ด ๋‘ ๊ฐœ๋ฅผ ์ด์šฉํ•ฉ๋‹ˆ๋‹ค
5+
robbed[i]: i๋ฒˆ์งธ ์ง‘์„ ํ„ธ๋ฉด์„œ ๊ตฌํ•œ rob(nums[:i+1])์˜ ์ตœ๋Œ€๊ฐ’
6+
unrobbed[i]: i๋ฒˆ์งธ ์ง‘์„ ์•ˆ ํ„ธ๋ฉด์„œ ๊ตฌํ•œ rob(nums[:i+1])์˜ ์ตœ๋Œ€๊ฐ’
7+
๋‘ ๋ฐฐ์—ด์„ ์ด์šฉํ•˜์—ฌ ์•„๋ž˜์™€ ๊ฐ™์€ ์ ํ™”์‹์„ ์„ธ์šธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค
8+
robbed[i] = nums[i] + max(robbed[i-2], unrobbed[i-1])
9+
unrobbed[i] = max(robbed[i-1], unrobbed[i-1])
10+
Big O
11+
- N: nums์˜ ๊ธธ์ด
12+
- Time complexity: O(N)
13+
- Space complexity: O(N)
14+
*/
15+
16+
func rob(nums []int) int {
17+
n := len(nums)
18+
19+
if n == 1 {
20+
return nums[0]
21+
}
22+
23+
robbed := make([]int, n)
24+
robbed[0] = nums[0]
25+
robbed[1] = nums[1]
26+
27+
unrobbed := make([]int, n)
28+
unrobbed[1] = nums[0]
29+
30+
for i := 2; i < n; i++ {
31+
robbed[i] = nums[i] + max(robbed[i-2], unrobbed[i-1])
32+
unrobbed[i] = max(robbed[i-1], unrobbed[i-1])
33+
}
34+
35+
return max(robbed[n-1], unrobbed[n-1])
36+
}
37+
38+
/*
39+
ํ’€์ด 2
40+
- ํ’€์ด 1๊ณผ ๋™์ผํ•œ๋ฐ, memoization์„ ์œ„ํ•ด ๋ฐฐ์—ด์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค
41+
robbed[i], unrobbed[i] ๊ณ„์‚ฐ์—๋Š” robbed[i-2], robbed[i-1], unrobbed[i-1]๋งŒ ์žˆ์–ด๋„ ์ถฉ๋ถ„ํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค
42+
Big O
43+
- N: nums์˜ ๊ธธ์ด
44+
- Time complexity: O(N)
45+
- Space complexity: O(1)
46+
*/
47+
48+
func rob(nums []int) int {
49+
n := len(nums)
50+
51+
if n == 1 {
52+
return nums[0]
53+
}
54+
55+
ppRobbed := nums[0] // robbed[i-2]์— ํ•ด๋‹น
56+
pRobbed := nums[1] // robbed[i-1]์— ํ•ด๋‹น
57+
pUnrobbed := nums[0] // unrobbed[i-1]์— ํ•ด๋‹น
58+
59+
for i := 2; i < n; i++ {
60+
ppRobbed, pRobbed, pUnrobbed = pRobbed, nums[i]+max(ppRobbed, pUnrobbed), max(pRobbed, pUnrobbed)
61+
}
62+
63+
return max(pRobbed, pUnrobbed)
64+
}
65+
66+
func max(a, b int) int {
67+
if a > b {
68+
return a
69+
} else {
70+
return b
71+
}
72+
}

0 commit comments

Comments
ย (0)