-
Notifications
You must be signed in to change notification settings - Fork 125
/
Copy pathmangodm-web.py
35 lines (28 loc) ยท 1.61 KB
/
mangodm-web.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
from typing import List
class Solution:
def rob(self, nums: List[int]) -> int:
"""
- Idea: i๋ฒ์งธ ์ง๊น์ง์ ์ต๋ ๊ธ์ก์ ๋ ๊ฐ์ง ์ค ๋ ํฐ ๊ฐ์ผ๋ก ๊ฒฐ์ ๋๋ค.
1. (i-2๋ฒ์งธ ์ง๊น์ง์ ์ต๋ ๊ธ์ก) + i๋ฒ์งธ ์ง์ ๊ธ์ก
2. (i-1๋ฒ์งธ ์ง๊น์ง์ ์ต๋ ๊ธ์ก)
์ด๋ฅผ ์ด์ฉํด ๋์ ํ๋ก๊ทธ๋๋ฐ์ผ๋ก ๊ฐ ์ง๊น์ง์ ์ต๋ ๊ธ์ก์ ๊ณ์ฐํ๋ค.
๋ค๋ง, ๋งจ ๋ง์ง๋ง ์ง๊ณผ ์ฒซ๋ฒ์งธ ์ง์ด ์ด์ด์ง ์ฌ์ดํด(cycle) ํํ์ด๊ธฐ ๋๋ฌธ์
์ฒซ๋ฒ์งธ ์ง๊ณผ ๋ง์ง๋ง ์ง์ด ๋์์ ๋๋๋ง์ ์๋ ์๋ค.
์ด๋ฅผ ์ฒ๋ฆฌํ๊ธฐ ์ํด ๋ ๊ฐ์ง ๊ฒฝ์ฐ๋ก ๋๋ ์ ๊ฐ๊ฐ ๊ณ์ฐํ๊ณ , ๋ ์ค ๋ ํฐ ๊ฐ์ ์ ํํ๋ค.
1. ์ฒซ๋ฒ์งธ ์ง์ ํฌํจํ๊ณ ๋ง์ง๋ง ์ง์ ํฌํจํ์ง ์๋ ๊ฒฝ์ฐ
2. ์ฒซ๋ฒ์งธ ์ง์ ํฌํจํ์ง ์๊ณ ๋ง์ง๋ง ์ง์ ํฌํจํ๋ ๊ฒฝ์ฐ
- Time Complexity: O(n). n์ ์ง์ ๊ฐ์.
๋ชจ๋ ์ง์ ํ๋ฒ์ฉ ์ํํด์ผ ํ๋ฏ๋ก O(n) ์๊ฐ์ด ๊ฑธ๋ฆฐ๋ค.
- Space Complexity: O(n). n์ ์ง์ ๊ฐ์.
๊ฐ ์ง๊น์ง์ ์ต๋ ๊ธ์ก์ ์ ์ฅํ๊ธฐ ์ํด ๋ฐฐ์ด์ ์ฌ์ฉํ๋ฏ๋ก O(n) ๋งํผ์ ๋ฉ๋ชจ๋ฆฌ๊ฐ ํ์ํ๋ค.
"""
if len(nums) == 1:
return nums[0]
dp1 = [0] + [0] * len(nums)
dp1[1] = nums[0]
dp2 = [0] + [0] * len(nums)
dp2[1] = 0
for i in range(2, len(nums) + 1):
dp1[i] = max(dp1[i - 1], dp1[i - 2] + nums[i - 1])
dp2[i] = max(dp2[i - 1], dp2[i - 2] + nums[i - 1])
return max(dp1[-2], dp2[-1])