ps | |
---|---|
링크 | programmers.co.kr/… |
출처 | 프로그래머스 |
문제 번호 | 42897 |
문제명 | 도둑질 |
레벨 | Level 4 |
분류 |
동적계획법 |
시간복잡도 | O(n) |
인풋사이즈 | n<=1,000,000 |
사용한 언어 | Python |
해결날짜 | 2020/12/11 |
태그 |
"""Solution code for "Programmers 42897. 도둑질".
- Problem link: https://programmers.co.kr/learn/courses/30/lessons/42897
- Solution link: http://www.teferi.net/ps/problems/programmers/42897
"""
def solution(money):
dp1, dp1_cur = [0, money[0]], max(money[0], money[1])
dp2, dp2_cur = [0, 0], money[1]
for m in money[2:]:
dp1[-1], dp1[-2] = dp1_cur, dp1[-1]
dp2[-1], dp2[-2] = dp2_cur, dp2[-1]
dp1_cur = max(dp1[-1], dp1[-2] + m)
dp2_cur = max(dp2[-1], dp2[-2] + m)
return max(dp1[-1], dp2_cur)