티스토리 뷰

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

 

코딩테스트 연습 - 도둑질

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

programmers.co.kr

첫번째 집을 터는 경우에 마지막 집은 인접한 경우이기 때문에 털 수 없고,

마찬가지로 마지막 집을 터는 경우 첫번째 집을 털 수 없기 때문에 두 경우로 나눠서 계산

def solution(money):
    answer = 0
    length = len(money)
    dp = [0] * length
    
    # 첫번째 집을 털고, 마지막 집은 안 터는 경우
    dp[0] = money[0]
    dp[1] = max(money[0], money[1])
    
    for i in range(2, length-1):
        dp[i] = max(dp[i-2] + money[i], dp[i-1])
    
    answer = max(dp)
    
    # 첫번째 집은 안 털고, 마지막 집을 터는 경우
    dp[0] = 0
    dp[1] = money[1]
    
    for i in range(2, length):
        dp[i] = max(dp[i-2] + money[i], dp[i-1])

    answer = max(answer, max(dp))
    
    return answer

 

공지사항
최근에 올라온 글
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함