[프로그래머스 파이썬] 도둑질

일단 해볼게·2023년 2월 19일
0

프로그래머스

목록 보기
40/106

https://school.programmers.co.kr/learn/courses/30/lessons/42897

def solution(money):
    dp1 = [0] * len(money) # 1번 집 털기
    dp2 = [0] * len(money) # 마지막 집 털기
    
    # 1번 집을 털고 마지막 집을 안 터는 경우
    dp1[0] = money[0]
    for i in range(1, len(money) - 1):  # 마지막 집은 털지 못함
        # (바로 전 집까지 훔칠 수 있는 최댓값)와 (전전집까지의 훔칠 수 있는 최댓값 + 현재 집의 money)
        dp1[i] = max(dp1[i - 1], dp1[i - 2] + money[i])
    
    # 1번 집을 안 털고 마지막 집을 터는 경우
    dp1[0] = 0 # 1번 집 0으로 초기화
    for i in range(1, len(money)):
        # (바로 전 집까지 훔칠 수 있는 최댓값)와 (전전집까지의 훔칠 수 있는 최댓값 + 현재 집의 money)
        dp2[i] = max(dp2[i - 1], dp2[i - 2] + money[i])

    return max(dp1[-2], dp2[-1])

점화식 : 현재 dp = max(바로 전 집까지 훔칠 수 있는 최댓값)와 (전전집까지의 훔칠 수 있는 최댓값 + 현재 집의 money)

  1. 1번 집을 터는 경우 / 마지막 집을 털지 않는 경우
  2. 1번 집을 털지 않는 경우 / 마지막 집을 터는 경우
profile
시도하고 More Do하는 백엔드 개발자입니다.

0개의 댓글