Leetcode Python - 198. House Robber
Leetcode #198 - House Robber
이번에는 특정 챕터별로 문제들을 풀어보겠습니다. dynamic programming를 집중적으로 풀어보겠습니다.
리트코드의 문제 198 ‘House Robber’을 파이썬으로 풀어 보도록 하겠습니다. 이 문제는 주어진 List에서 연속되지 않은 index들의 최대 합을 구하는 문제입니다.
discuss를 보도록 하겠습니다! ^^
포인트는 k번째의 최대값은 f(k-2) + nums[k] 혹은 f(k-1) 중에 최대값 인 것입니다.
f(k) = max( f(k-2) + nums[k], f(k-1) )
class Solution:
def rob(self, nums):
prev = curr = 0
for num in nums:
temp = prev
prev = curr
curr = max(num + temp, prev)
return curr
시간복잡도는 O(n) : nums loop
공간복잡도는 O(1) : 변수 prev, curr, temp 선언