[백준 2156번][Python/파이썬] 포도주 시식

공학도 Lee·2023년 2월 17일
0

백준 문제 풀이

목록 보기
50/63
post-custom-banner

1. 문제


출처: 백준 2156번 포도주 시식

2. 풀이


연속으로 3잔을 마실 수는 없기 때문에 포도주를 마시는 방법은 총 3가지로 분류할 수 있다.

  1. 지금 잔과 이전 잔을 마신다.
  2. 지금 잔만 마신다.
  3. 지금 잔을 마시지 않는다.

문제를 DP 방식으로 접근해, 현재까지 마신 포도주의 양을 쭉 저장해온다고 했을 때, 각 상황에 대해 더해줘야 하는 양은 아래와 같다.

  1. 지금 잔 + 이전 잔 + 3개 잔 이전에 마셔온 양
  2. 지금 잔 + 2개 잔 이전에 마셔온 양
  3. 이전 잔까지 마셔온 양

각 상황에 대해서 값을 구한 후, 최댓값을 계속해서 마셔온 양에 저장하고 최종 값을 출력하면 된다.

3. 소스코드


n = int(input())

dp = [0]*n
number = [0]*n
for i in range(n):
    number[i] = int(input())
    if i == 0:
        dp[0] = number[0]
    elif i == 1:
        dp[1] = number[0] + number[1]
    elif i == 2:
        temp1 = number[i]+number[i-1]
        temp2 = number[i]+dp[i-2]
        temp3 = dp[i-1]
        dp[i] = max(temp1,temp2,temp3)
    else:
        temp1 = number[i]+number[i-1]+dp[i-3]
        temp2 = number[i]+dp[i-2]
        temp3 = dp[i-1]
        dp[i] = max(temp1,temp2,temp3)
print(dp[n-1])

4. 그 외


백준 2579번 계단 오르기 문제와 비슷한 부분이 많다. 이전 문제는 현재 계단을 오르지 않는다는 선택지가 없지만, 이 문제의 경우는 지금 와인 잔을 마시지 않는다는 선택지가 있어서 경우의 수가 하나 더 추가된다.

계단 오르기 문제는 백준 2579번 계단 오르기 문제 풀이에 풀이를 해두었다.

profile
이창민, Changmin Lee
post-custom-banner

0개의 댓글