[Python] 백준/BOJ 2156번: 포도주 시식

2023. 3. 26. 17:42·Algorithm/백준 (BOJ)
반응형

문제 링크

https://www.acmicpc.net/problem/2156


문제

효주는 포도주 시식회에 갔다. 그 곳에 갔더니, 테이블 위에 다양한 포도주가 들어있는 포도주 잔이 일렬로 놓여 있었다. 효주는 포도주 시식을 하려고 하는데, 여기에는 다음과 같은 두 가지 규칙이 있다.

  1. 포도주 잔을 선택하면 그 잔에 들어있는 포도주는 모두 마셔야 하고, 마신 후에는 원래 위치에 다시 놓아야 한다.
  2. 연속으로 놓여 있는 3잔을 모두 마실 수는 없다.

효주는 될 수 있는 대로 많은 양의 포도주를 맛보기 위해서 어떤 포도주 잔을 선택해야 할지 고민하고 있다. 1부터 n까지의 번호가 붙어 있는 n개의 포도주 잔이 순서대로 테이블 위에 놓여 있고, 각 포도주 잔에 들어있는 포도주의 양이 주어졌을 때, 효주를 도와 가장 많은 양의 포도주를 마실 수 있도록 하는 프로그램을 작성하시오. 

예를 들어 6개의 포도주 잔이 있고, 각각의 잔에 순서대로 6, 10, 13, 9, 8, 1 만큼의 포도주가 들어 있을 때, 첫 번째, 두 번째, 네 번째, 다섯 번째 포도주 잔을 선택하면 총 포도주 양이 33으로 최대로 마실 수 있다.


풀이

계단 오르기 문제와 비슷하게 풀었다.

계단 오르기 문제에서의 score, stairs 리스트가 해당 문제에서의 wine, dp 리스트이다.

계단 오르기 문제와의 차이점은 계단 오르기 문제는 마지막 도착 계단을 반드시 밟아야 하지만, 포도주 시식 문제는 꼭 마지막 잔을 마시지는 않아도 된다.

따라서 포도주 시식 문제에서는 이전 단계의 포도주 양(dp[i-1])도 함께 비교한다.

 

dp[0] = wine[0]

dp[1] = wine[0] + wine[1]

dp[2] = max(wine[0] + wine[2], wine[1] + wine[2], dp[1])

dp[3] = max(wine[0] + wine[1] + wine[3], wine[0] + wine[2] + wine[3], dp[2])

            = max(dp[1] + wine[3], dp[0] + wine[2] + wine[3], dp[2])

...

dp[i] = max(dp[i-2] + wine[i], dp[i-3] + wine[i-1] + wine[i], dp[i-1])


정답 코드

import sys
input = sys.stdin.readline

n = int(input())
wine = [0] * 10000
dp = [0] * 10000

for i in range(n):
    wine[i] = int(input())

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

print(max(dp))
반응형

'Algorithm > 백준 (BOJ)' 카테고리의 다른 글

[Python] 백준/BOJ 28127번: 숫자탑과 쿼리 (Gold 5)  (0) 2023.07.20
[Python] 백준/BOJ 28107번: 회전초밥  (0) 2023.07.18
[Python] 백준/BOJ 9461번: 파도반 수열  (0) 2023.03.22
[Python] 백준/BOJ 2579번: 계단 오르기  (0) 2023.03.21
'Algorithm/백준 (BOJ)' 카테고리의 다른 글
  • [Python] 백준/BOJ 28127번: 숫자탑과 쿼리 (Gold 5)
  • [Python] 백준/BOJ 28107번: 회전초밥
  • [Python] 백준/BOJ 9461번: 파도반 수열
  • [Python] 백준/BOJ 2579번: 계단 오르기
올콩
올콩
콩 심은 데 콩 난다
  • 올콩
    콩스토리
    올콩
  • 전체
    오늘
    어제
    • 분류 전체보기 (154) N
      • SSAFY (10)
      • Algorithm (80) N
        • 이론 (5)
        • 백준 (BOJ) (74) N
        • 프로그래머스 (1)
      • Frontend (5)
      • React (13)
      • Next.js (3)
      • Vue (4)
      • Node.js (3)
      • Trouble Shooting (7)
      • HTML (9)
      • DevOps (3)
        • Git (3)
      • Language (9)
        • Java (9)
      • Embedded (1)
      • CS (5)
        • Network (1)
        • Blockchain (4)
      • 자격증 (2)
  • 블로그 메뉴

    • GitHub
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    kakaomap
    vue
    DP
    github
    SSAFYcial
    SSAFY
    싸피
    티스토리챌린지
    해시
    자바
    bfs
    우선순위큐
    Java
    재귀
    파이썬
    카카오맵
    dfs
    누적합
    강의
    React
    렌더링최적화
    Next.js
    오블완
    Algorithm
    Error
    블록체인
    html5
    구현
    알고리즘
    백준
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
올콩
[Python] 백준/BOJ 2156번: 포도주 시식
상단으로

티스토리툴바