Skip to content

Commit 6739cfc

Browse files
committed
solve: house-robber
1 parent 9aefc67 commit 6739cfc

File tree

1 file changed

+23
-14
lines changed

1 file changed

+23
-14
lines changed

β€Žhouse-robber/sounmind.pyβ€Ž

Lines changed: 23 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,29 @@
1-
from typing import List
2-
3-
41
class Solution:
52
def rob(self, nums: List[int]) -> int:
6-
house_length = len(nums)
3+
# μ˜ˆμ™Έ 처리: 집이 2개 μ΄ν•˜μΌ 경우 κ·Έ 쀑 큰 값이 μ΅œλŒ€ λ„λ‘‘μ§ˆ κΈˆμ•‘
4+
if len(nums) < 3:
5+
return max(nums)
6+
7+
# DP(Dynamic Programming)λ₯Ό μœ„ν•œ λ©”λͺ¨μ΄μ œμ΄μ…˜ λ°°μ—΄
8+
# memo[0]: 첫 번째 μ§‘κΉŒμ§€ κ³ λ €ν–ˆμ„ λ•Œ μ΅œλŒ€ λ„λ‘‘μ§ˆ κΈˆμ•‘
9+
# memo[1]: 두 번째 μ§‘κΉŒμ§€ κ³ λ €ν–ˆμ„ λ•Œ μ΅œλŒ€ λ„λ‘‘μ§ˆ κΈˆμ•‘
10+
memo = [nums[0], max(nums[0], nums[1])]
711

8-
if house_length == 0:
9-
return 0
10-
if house_length == 1:
11-
return nums[0]
12-
if house_length == 2:
13-
return max(nums[0], nums[1])
12+
# μ„Έ 번째 μ§‘λΆ€ν„° 순차적으둜 λ„λ‘‘μ§ˆ μ‹œλ‚˜λ¦¬μ˜€ κ²€ν† 
13+
# λ§€ μ§‘λ§ˆλ‹€ 두 κ°€μ§€ 선택이 있음: ν˜„μž¬ 집을 ν„Έκ±°λ‚˜ vs ν„Έμ§€ μ•Šκ±°λ‚˜
14+
for num in nums[2:]:
15+
# ν˜„μž¬ 집을 ν„Έ 경우: ν˜„μž¬ μ§‘ κΈˆμ•‘ + μ „μ „ μ§‘κΉŒμ§€μ˜ μ΅œλŒ€ κΈˆμ•‘
16+
# (μΈμ ‘ν•œ 집은 ν„Έ 수 μ—†μœΌλ―€λ‘œ λ°”λ‘œ 이전 집은 κ±΄λ„ˆλœ€)
17+
robbed = memo[0] + num
1418

15-
dp = [nums[0], max(nums[0], nums[1])]
19+
# ν˜„μž¬ 집을 ν„Έμ§€ μ•ŠλŠ” 경우: 이전 μ§‘κΉŒμ§€μ˜ μ΅œλŒ€ κΈˆμ•‘μ„ κ·ΈλŒ€λ‘œ μœ μ§€
20+
not_robbed = memo[1]
1621

17-
for index in range(2, house_length):
18-
dp.append(max(dp[index - 1], dp[index - 2] + nums[index]))
22+
# λ©”λͺ¨μ΄μ œμ΄μ…˜ λ°°μ—΄ μ—…λ°μ΄νŠΈ
23+
# λ‹€μŒ λ°˜λ³΅μ„ μœ„ν•΄ memo[0]은 μ΄μ „κΉŒμ§€μ˜ μ΅œλŒ€κ°’μœΌλ‘œ κ°±μ‹ 
24+
memo[0] = memo[1]
25+
# memo[1]은 ν˜„μž¬κΉŒμ§€μ˜ μ΅œλŒ€κ°’(ν˜„μž¬ 집을 ν„Έκ±°λ‚˜ μ•ˆ ν„Έκ±°λ‚˜ 쀑 더 큰 κ°’)으둜 κ°±μ‹ 
26+
memo[1] = max(robbed, not_robbed)
1927

20-
return dp[-1]
28+
# λ§ˆμ§€λ§‰ μ§‘κΉŒμ§€ κ³ λ €ν–ˆμ„ λ•Œμ˜ μ΅œλŒ€ λ„λ‘‘μ§ˆ κΈˆμ•‘ λ°˜ν™˜
29+
return memo[1]

0 commit comments

Comments
Β (0)