[백준] 2156-포도주시식

kiteday·2025년 7월 16일
0

코딩테스트

목록 보기
13/46

문제바로가기

다이나믹프로그래밍 문제를 풀 때는 딱 3가지만 생각한다.

  • 초기값
  • 규칙
  • 규칙예외
n = int(input())
data = [int(input()) for _ in range(n)]

dp = [0]*(n+1)

dp[0] = data[0]
dp[1] = data[0] + data[1]
dp[2] = max(dp[1], data[0]+data[2], data[2]+data[1])
for i in range(3,n):
    dp[i] = max(dp[i-3]+data[i-1]+data[i], dp[i-2]+data[i], dp[i-1])
# print(dp)
print(dp[n-1])

이렇게 코드가 해피엔딩으로 제출 끝일 줄 알았는데 계속 90%대에서 런타임에러(인덱스 에러)가 남 ㅠㅠ.
결국 data값을 입력받는 부분을 참고해서 바꿔줬더니 정답이다.
아마 data의 크기가 사전에 정의되지 않아서 그런가보다.

n = int(input())
data=[0]*10000
for i in range(n):
  data[i]=int(input())
dp = [0]*10000

참고

profile
공부

0개의 댓글