본문 바로가기

[ leetcode ]

198. House Robber

반응형
SMALL

순서대로 나열된 집을 터는 문제다.

조건은 연속된 집을 털면 안 된다.

 


 

solution 1.

집을 연속되지 않게 털려면, 현재에서 1곳 또는 2곳의 집을 띄워놓고 다른 집을 털러 갈 수 있다.

타뷸레이션을 활용한다.

 

class Solution:
    def rob(self, nums: List[int]) -> int:
        if not nums:
            return 0
        if len(nums) <= 2:
            return max(nums)

        dic = collections.OrderedDict()
        dic[0] = nums[0]
        dic[1] = max(nums[1], dic[0])
        
        for i in range(2, len(nums)):
            dic[i] = max(dic[i-1], dic[i-2] + nums[i]) 
        
        return dic[len(nums)-1]

 

집이 하나도 없을 경우와 집이 두곳만 있을 경우를 생각하지 못 했다.

따라서 집이 하나도 없을 경우, 한 곳도 털지 못 했으므로 0을 리턴하고 털 집이 두곳이면 그중에서 가장 큰 곳을 골라서 털면 된다.

반응형
LIST

'[ leetcode ]' 카테고리의 다른 글

69. Sqrt(x)  (0) 2022.12.17
66. Plus One  (0) 2022.12.16
70. Climbing Stairs  (0) 2022.12.14
53. Maximum Subarray  (0) 2022.12.13
509. Fibonacci Number  (0) 2022.12.11