Skip to content

Commit a6e67d9

Browse files
committed
feat: add "House Robber" solution
1 parent dd8496a commit a6e67d9

File tree

1 file changed

+59
-0
lines changed

1 file changed

+59
-0
lines changed

house-robber/shinsj4653.py

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
"""
2+
Inputs: 정수형 배열 nums
3+
4+
Outputs: 훔치는 돈의 max값
5+
6+
Constraints:
7+
1 <= nums.length <= 100
8+
0 <= nums[i] <= 400
9+
10+
Time Complexity: O(2^n) X
11+
12+
dp[n] = max(dp(n), dp(n - 2) + nums[i])
13+
재귀 사용
14+
2^(100)
15+
2^10 = 10^3
16+
막상 실제 값을 출력하면 말이 안되는 값..
17+
18+
Space Complexity: O(n)
19+
dp 배열은 nums와 똑같으므로
20+
21+
# 에러
22+
constraint로 인한 반례 항상 생각하도록!
23+
len이 0이거나 1일때는 따로 처리!
24+
25+
# 반례
26+
nums =
27+
[2,1,1,2]
28+
29+
output = 3, expected = 4
30+
31+
len(nums) - 1이 0 혹은 1일때, 즉 nums길이가 1 혹은 2일 경우엔 따로 처리
32+
33+
"""
34+
35+
36+
class Solution:
37+
def rob(self, nums) -> int:
38+
dp = [-1 for _ in range(len(nums))]
39+
n = len(nums) - 1
40+
41+
if n == 0:
42+
return nums[0]
43+
44+
# 초기값 세팅
45+
dp[0] = nums[0]
46+
dp[1] = max(nums[1], nums[0])
47+
48+
if n == 1:
49+
return dp[1]
50+
51+
def memo(i):
52+
if dp[i] != -1:
53+
return dp[i]
54+
55+
dp[i] = max(memo(i - 1), nums[i] + memo(i - 2))
56+
return dp[i]
57+
58+
return max(memo(n - 1), nums[n] + memo(n - 2))
59+

0 commit comments

Comments
 (0)