1
+ '''
2
+ Solution:
3
+ ์ค์ค๋ก ํ์ง ๋ชปํด ํ์ต๋ง ์งํํ์ต๋๋ค.
4
+ ๋ค์ ๊ธฐํ์ ๋ค์ ํ์ด๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค.
5
+ '''
6
+ class Solution :
7
+ def rob (self , nums : List [int ]) -> int :
8
+ prev , curr = 0 , 0
9
+ for num in nums :
10
+ prev , curr = curr , max (num + prev , curr )
11
+
12
+ return curr
13
+
14
+
15
+ # class Solution:
16
+ # '''
17
+ # 4. ๋ฌ๋ ์ ์ฝ๋ ํ์ด - DP, prev, curr
18
+ # O(n) time
19
+ # O(1) space
20
+ # '''
21
+
22
+ # # ๋ฌ๋ ์ ์ฝ๋ ํ์ด - DP, prev, cur
23
+
24
+ # def rob(self, nums: List[int]) -> int:
25
+ # prev, curr = 0, 0
26
+ # for num in nums:
27
+ # prev, curr = curr, max(num + prev, curr)
28
+
29
+ # return curr
30
+
31
+ # '''
32
+ # 3. ๋ฌ๋ ์ ์ฝ๋ ํ์ด - DP
33
+ # [1,2,3,1]
34
+ # [1, 2, 3, 1]
35
+ # DP:[0, 1, 2, 4, 4]
36
+ # MAX(1 + DP[2], DP[1]) = MAX(1 + 2, 4) = 4
37
+ # '''
38
+ # # ๋ฌ๋ ์ ์ฝ๋ ํ์ด - DP
39
+ # # def rob(self, nums: List[int]) -> int:
40
+ # # dp = [0] * (len(nums) + 1)
41
+ # # dp[1] = nums[0]
42
+ # # for n in range(2,len(nums) + 1):
43
+ # # dp[n] = max(nums[n - 1] + dp[n - 2], dp[n - 1])
44
+ # # return dp[-1]
45
+ # '''
46
+ # 2. ๋ฌ๋ ์ ์ฝ๋ ํ์ด - ์ฌ๊ท, ๋ฉ๋ชจ์ด์ ์ด์
47
+ # time: O(n)
48
+ # space: O(n)
49
+ # '''
50
+ # # ๋ฌ๋ ์ ์ฝ๋ ํ์ด - ์ฌ๊ท, ๋ฉ๋ชจ์ด์ ์ด์
51
+ # # def rob(self, nums: List[int]) -> int:
52
+ # # memo = {}
53
+
54
+ # # def dfs(start):
55
+ # # if start in memo:
56
+ # # return memo[start]
57
+ # # if not start < len(nums):
58
+ # # memo[start] = 0
59
+ # # else:
60
+ # # memo[start] = max(nums[start] + dfs(start + 2), dfs(start + 1))
61
+ # # return memo[start]
62
+ # # return dfs(0)
63
+ # '''
64
+ # 1. ๋ฌ๋ ์ ์ฝ๋ ํ์ด - ์ฌ๊ท
65
+ # time: O(2^n)
66
+ # space: O(n)
67
+
68
+ # F([1,2,3,1]) => MAX(1 + F([3,1], f([2,3,1])))
69
+ # F([3,1]) => MAX(3 + F([]), F([1]))
70
+ # F([]) => 0
71
+ # F([1]) => MAX(1 + F([]), F([])) => MAX(1 + 0, 0) => 1
72
+ # F([]) => 0
73
+ # F([]) => 0
74
+ # F([2,3,1]) => MAX(2 + F([1]), F([3,1]))
75
+ # F([1]) => MAX(1 + F([]), F([])) => MAX(1 + 0, 0) => 1
76
+ # F([]) => 0
77
+ # F([]) => 0
78
+ # F([3,1]) => MAX(3 + F([]), F([1]))
79
+ # F([]) => 0
80
+ # F([1]) => MAX(1 + F([]), F([])) => MAX(1 + 0, 0) => 1
81
+ # F([]) => 0
82
+ # F([]) => 0
83
+ # ์ฌ๊ท๊ฐ ๋ถํ์ํ๊ฒ ๋ฐ๋ณต๋๊ณ ์๋ค.
84
+ # ๋ฉ๋ชจ์ด์ ์ด์
์ผ๋ก ๊ธฐ์ตํด๋๋ฉด ๋ฐ๋ณต์ ์คํตํ ์ ์๋ค.
85
+ # '''
86
+ # # ๋ฌ๋ ์ ์ฝ๋ ํ์ด - ์ฌ๊ท
87
+ # # def rob(self, nums: List[int]) -> int:
88
+
89
+ # # def dfs(start):
90
+ # # if not start < len(nums):
91
+ # # return 0
92
+ # # return max(nums[start] + dfs(start + 2), dfs(start + 1))
93
+ # # return dfs(0)
94
+
95
+ # # neetcode ํ์ด - DP, ์ดํด์๋จ...
96
+ # # def rob(self, nums: List[int]) -> int:
97
+ # # rob1, rob2 = 0, 0
98
+ # # # [rob1, rob2, n, n+1, ...]
99
+ # # for n in nums:
100
+ # # temp = max(n + rob1, rob2)
101
+ # # rob1 = rob2
102
+ # # rob2 = temp
103
+ # # return rob2
0 commit comments