|
| 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