문제
https://programmers.co.kr/learn/courses/30/lessons/42897?language=python3
코드
def solution(money):
dp=[0]*(len(money))
dp[0]=money[0]
dp[1]=max(money[1],money[0])
for i in range(2,len(money)-1):
dp[i]=max(dp[i-1],dp[i-2]+money[i])
dp1 = [0] * (len(money))
dp1[0] = 0
dp1[1] = money[1]
for i in range(2, len(money)):
dp1[i] = max(dp1[i - 1], dp1[i - 2] + money[i])
answer=max(max(dp),max(dp1))
return answer
생각 정리
첫 집과 마지막 집이 둘다 포함되는 경우가 생길 수 있기 때문에
1) 첫 번째 집을 무조건 털고, 마지막 집은 털지 않는 경우
2) 마지막 집을 무조건 털고 첫 번째 집은 털지 않는 경우
로 나눠서 생각해야 한다.
'문제풀이 > DP' 카테고리의 다른 글
[파이썬] [DP] 백준 2579 계단 오르기 (0) | 2022.02.24 |
---|---|
* [파이썬] [DP] Pro N으로 표현 (0) | 2022.02.17 |
[파이썬] [DP] Pro 등굣길 (0) | 2022.02.17 |
[파이썬] [DP] 백준 1149 RGB거리 (0) | 2022.01.30 |
[파이썬] [DP] 백준 11057 오르막 수 (0) | 2022.01.30 |