본문 바로가기
Algorithm(BOJ, Python)/Dynamic Programing

[백준_2156] 포도주시식 python

by kurooru 2022. 6. 29.

규칙을 찾는것이 쉽지 않았다.

결국 나도 구글링을 하여 조금(?) 도움을 받았다.

틀리면 답지보고 배우는거지뭐

문제는 이후에 발생했다.

100% 채점 후 런타임에러가 뜨는 데 이유를 모르겠었다.

찬찬히 다시 살펴보니 마지막 인덱스에서 나는 오류가 아닌

n이 1이거나 2일때의 문제였다.

따라서 n이 1이거나 2일때에는 예외 처리를 해 주었다.

이런건 어케찾는거야

# n 입력
n = int(input())

# table
table = [0]

# 와인 양 입력
for _ in range(n):
 wine = int(input())
 table.append(wine)

# n == 1일 경우
if n == 1:
 print(table[1])

# n == 2일 경우
elif n == 2:
 print(table[1] + table[2])

# n >= 3
else:
 # dp 설계
 dp = [
  0 for _ in range(n + 1)
 ]

 # 초기설정
 dp[1] = table[1]
 dp[2] = table[1] + table[2]
 dp[3] = max(table[1] + table[2], table[2] + table[3], table[1] + table[3])

 # 점화식 활용하여 dp 채워넣기
 for i in range(4, n+1):
  dp[i] = max(dp[i-2] + table[i], dp[i-3] + table[i-1] + table[i], dp[i-1])

 print(dp[n])