File tree Expand file tree Collapse file tree 1 file changed +59
-0
lines changed Expand file tree Collapse file tree 1 file changed +59
-0
lines changed Original file line number Diff line number Diff line change
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
+
You can’t perform that action at this time.
0 commit comments