문제 링크 : https://leetcode.com/problems/house-robber-ii/
house robber에 이어서 house robber2에서는
첫번쨰 집과 맨 끝 집이 이어져있다는 조건
-> 첫번째 숫자와 마지막 숫자를 동시에 선택 불가능
이 추가된 문제이다.
즉
nums = [1,2,3,1]이면
범위가 [1,2,3] 혹은 [2,3,1]중에 하나가 되는 것이다.
그 다음의 방법은 이전의 house robber문제와 동일하게 풀면 되는 문제이다
class Solution:
def rob(self, nums: List[int]) -> int:
def robb(nums):
dp1, dp2 = 0 , 0
# a = rob current, b= not robbing current
for i in nums:
dp1, dp2 = i+dp2, max(dp1, dp2)
return max(dp1, dp2)
return max(robb(nums[1:] or nums),robb(nums[:-1]))