[Python][프로그래머스][Level4] 도둑질

[Python][프로그래머스][Level4] 도둑질

코드

def solution(money):
    if len(money)<=3:
        return max(money)
    
    #첫집 o
    answer1=[0]*len(money)
    answer1[0]=money[0]
    answer1[1]=money[1]
    answer1[2]=money[0]+money[2]
    for num in range(3,len(money)-1):
        answer1[num]=money[num]+max(answer1[num-2],answer1[num-3])
    #첫집 x
    answer2=[0]*len(money)
    answer2[1]=money[1]
    answer2[2]=money[2]
    for num in range(3,len(money)):
        answer2[num]=money[num]+max(answer2[num-2],answer2[num-3])
    
    return max(max(answer1),max(answer2))

dp로 풀었다.

원형의 구조에서 직선의 구조로 바꿔주기 위해사

두 가지 경우로 나눴다.

첫집을 도둑질 하는 경우와 아닌 경우이다.

두 가지 경우에 대한 dp를 구하고 그 중 큰 값을 반환한다.

Discussion and feedback