기록

프로그래머스_python_도둑질 본문

코딩테스트/python

프로그래머스_python_도둑질

youngyin 2022. 1. 10. 17:04

문제

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

 

코딩테스트 연습 - 도둑질

도둑이 어느 마을을 털 계획을 하고 있습니다. 이 마을의 모든 집들은 아래 그림과 같이 동그랗게 배치되어 있습니다. 각 집들은 서로 인접한 집들과 방범장치가 연결되어 있기 때문에 인접한

programmers.co.kr

풀이

dp에 해당 위치에서 얻을 수 있는 최대값을 저장한다.

dp[i] = max(i-1번째 집을 털때 최대값, i-2번째 집과 i번째 집을 털때의 최대값)

 

1. -1번째, 1번째 집을 건너뛴다.

2. 0번째 집을 건너 뛴다.

초기 경우를 둘로 나누어서 최댓값을 구한다.

코드

def solution(money):    
    answer = list()
    
    # -1번째, 1번째 집을 건너뛴다.
    dp = [m for m in money]
    dp[-1] = 0
    dp[1] = max(dp[0], dp[1])
    
    for i in range(2, len(money)) : 
        dp[i] = max(dp[i-1], dp[i-2]+dp[i])
    answer.append(dp[-1])

    # 0번째 집을 건너뛴다.
    dp = [m for m in money]
    dp[0] = 0
    
    for i in range(2, len(money)) : 
        dp[i] = max(dp[i-1], dp[i-2]+dp[i])
    answer.append(dp[-1])
        
    return max(answer)
Comments