코딩테스트/python
프로그래머스_python_도둑질
zyin
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)