Skip to content

Commit 596ce89

Browse files
committed
2 parents 30ea21d + 39f0e0e commit 596ce89

File tree

1 file changed

+45
-0
lines changed

1 file changed

+45
-0
lines changed

โ€Žhouse-robber/hu6r1s.pyโ€Ž

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
class Solution:
2+
"""
3+
- ์ด์ „ ํ’€์ด
4+
[1,2,3,1]
5+
์ธ๋ฑ์Šค 0์—์„œ ํ›”์ณค์„ ๋•Œ, ์ธ๋ฑ์Šค 1์€ ํ›”์น˜๋ฉด ์•ˆ๋˜๋ฏ€๋กœ nums[0] + F(nums[2:])
6+
์ธ๋ฑ์Šค 0์—์„œ ์•ˆํ›”์ณค์„ ๋•Œ, ์ธ๋ฑ์Šค 1์—์„œ ํ›”์ณ์•ผ ํ•˜๋ฏ€๋กœ F(nums[1:])
7+
8+
F[nums] = max(nums[0] + F[nums[2:]], F(nums[1:]))
9+
F[i] = max(nums[i] + F(i+2), F(i+1))
10+
11+
12+
- dp
13+
nums = [1, 2, 3, 1]
14+
์ง‘์ด ํ•˜๋‚˜์ผ ๋•Œ๋Š” ํ•œ ๊ณณ๋งŒ ๋ณผ ์ˆ˜ ์žˆ์œผ๋‹ˆ ๊ทธ ์ง‘์˜ ๋ˆ์„ ํ›”์นจ: dp[0] = nums[0] = 1
15+
์ง‘์ด ๋‘ ๊ฐœ์ผ ๋•Œ, ์ธ๋ฑ์Šค 0์ธ ๊ณณ์„ ๊ฐ”๋‹ค๋ฉด dp[0]์ด ๊ฐ€์žฅ ํฌ๊ณ ,
16+
๊ฐ€์ง€ ์•Š์•˜๋‹ค๋ฉด ์ธ๋ฑ์Šค 1์„ ๊ฐ€๊ฒŒ ๋จ. dp[1] = max(dp[0], nums[1]) = max(1, 2) = 2
17+
๊ทธ๋ž˜์„œ ์ธ๋ฑ์Šค 0์„ ๊ฐ”์„ ๋•Œ์™€ ๊ฐ€์ง€ ์•Š์•˜์„ ๋•Œ๋ฅผ ๊ณ ๋ คํ•˜์—ฌ ํฐ ๋ˆ์„ ๊ฐ€์ ธ์˜ด
18+
์ง‘์ด ์„ธ ๊ฐœ์ผ ๋•Œ, ์ธ๋ฑ์Šค 0์„ ๊ฐ”๋‹ค๋ฉด ์ธ๋ฑ์Šค 2๋ฅผ ๊ฐ€์•ผํ•˜๊ณ , ์ธ๋ฑ์Šค 0์„ ๊ฐ€์ง€ ์•Š์•˜๋‹ค๋ฉด ์ธ๋ฑ์Šค 1์„ ๊ฐ
19+
์ด๋ฅผ ๊ณ ๋ คํ•˜๋ฉด, ์ธ๋ฑ์Šค 0์„ ๊ฐ”์„ ๋•Œ์˜ ๊ฐ€์žฅ ํฐ ๊ฐ’์ด dp[0]์ด๊ณ , ์ธ๋ฑ์Šค 2๋ฅผ ๊ฐ€์•ผํ•˜๋‹ˆ nums[2]๋ฅผ ๋”ํ•œ ๊ฐ’๊ณผ
20+
์ธ๋ฑ์Šค 0์— ๊ฐ€์ง€ ์•Š๊ณ  ์ธ๋ฑ์Šค 1๋กœ ๊ฐ”๋‹ค๋ฉด dp[1]์ด ๊ฐ€์žฅ ํฌ๋‹ค.
21+
๊ทธ๋ž˜์„œ dp[2] = max(dp[0] + nums[2], dp[1])
22+
์ง‘์ด ๋„ค ๊ฐœ์ผ ๋•Œ, ์ธ๋ฑ์Šค 3์„ ๊ฐ„๋‹ค๋ฉด ์ธ๋ฑ์Šค 1์„ ๊ฐ€๊ฒŒ ๋˜๋ฏ€๋กœ ์ธ๋ฑ์Šค 1๊นŒ์ง€์˜ dp ๊ฐ’๊ณผ ์ธ๋ฑ์Šค 3์˜ ๊ฐ’์„ ๋”ํ•œ ๊ฐ’๊ณผ
23+
์ธ๋ฑ์Šค 3์„ ๊ฐ€์ง€ ์•Š๋Š”๋‹ค๋ฉด ์ธ๋ฑ์Šค 0๊ณผ ์ธ๋ฑ์Šค 2๋ฅผ ๊ฐ€๊ฒŒ ๋œ๋‹ค.
24+
๊ทธ๋ ‡๋‹ค๋ฉด ์ธ๋ฑ์Šค 2๊นŒ์ง€์˜ ๊ฐ’์„ ๋น„๊ตํ•˜์—ฌ ๋” ํฐ ๋ˆ์„ ๊ฐ€์ ธ๊ฐ„๋‹ค.
25+
๊ทธ๋ž˜์„œ dp[3] = max(dp[1] + nums[3], dp[2])๊ฐ€ ๋œ๋‹ค.
26+
27+
- TC
28+
- for loop -> O(n)
29+
- SC
30+
- dp ํ…Œ์ด๋ธ” ํฌ๊ธฐ -> O(n)
31+
"""
32+
def rob(self, nums: List[int]) -> int:
33+
if not nums:
34+
return 0
35+
if len(nums) == 1:
36+
return nums[0]
37+
38+
dp = [0] * len(nums)
39+
dp[0] = nums[0]
40+
dp[1] = max(dp[0], nums[1])
41+
42+
for i in range(2, len(nums)):
43+
dp[i] = max(dp[i-2] + nums[i], dp[i-1])
44+
45+
return dp[-1]

0 commit comments

Comments
ย (0)