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

2022. 3. 14. 12:30·레거시모음/알고리즘 문제풀이

백준 온라인저지 2156번 포도주 시식

문제풀러 바로가기👇👇👇👇👇👇

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

 

2156번: 포도주 시식

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

www.acmicpc.net

 

 

 

문제풀이


다이나믹 프로그래밍을 이용해 문제를 풀 수 있다. 연속으로 3잔을 마실 수 없는 조건을 만족시켜야하고, 최대한 많은 포도주를 마셔야하기 때문에 점화식을 잘 세우고, max 메소드를 이용해야한다.

 

wine 맨 앞에 0인 더미 값을 넣어줘 dp와 인덱스를 맞춰줬다. 아래 코드를 통해 점화식을 도출해보자.

dp[1]와 dp[2]은 점화식이 따로 필요없이 확정되는 값이다. dp[3]부터 차례로 포도주의 최대값을 구하는 식을 만들면 공통점이 보일 것이고, 그것을 통해 점화식을 유추해낼 수 있다.

 

 

 

wine = [0, 6, 10, 13, 9, 8, 1]
dp = [0] * (n+1)
dp[1] = wine[1]

# n의 범위가 1이상이므로 예외 분기를 넣어야한다.
if n > 1:
    dp[2] = wine[1] + wine[2]

# 점화식 도출
dp[3] = max(dp[1] + wine[3], dp[2], dp[0]+wine[2]+wine[3])
dp[4] = max(dp[2] + wine[4], dp[3], dp[1]+wine[3]+wine[4])

# 점화식은 dp[i] = max(dp[i-2]+wine[i], dp[i-1], dp[i-3]+wine[i-1]+wine[i]) 이다.

이제 점화식을 바탕으로 코드를 짜면 된다.

 

 

코드


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

dp = [0] * (n+1)
dp[1] = wine[1]
if n > 1:
    dp[2] = wine[1] + wine[2]

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

print(dp[n])
'레거시모음/알고리즘 문제풀이' 카테고리의 다른 글
  • [프로그래머스][Python] Lv2. 메뉴 리뉴얼
  • [프로그래머스][Python] Lv2. 게임 맵 최단거리
  • [백준][파이썬] 10816번 숫자 카드 2
  • [백준][파이썬] 18870번 좌표압축
gakko
gakko
좌충우돌 개발기
  • gakko
    MYVELOP 마이벨롭
    gakko
  • 전체
    오늘
    어제
    • 분류 전체보기 (216)
      • 끄적끄적 (7)
      • Spring (21)
      • Java (3)
      • NestJS (1)
      • Redis (3)
      • RabbitMQ (0)
      • Test (3)
      • 대외활동 (36)
        • 부스트캠프 (23)
        • IT커뮤니티 (5)
        • 글또 (5)
        • 컨퍼런스 (3)
      • Infra (2)
        • k8s (1)
        • Docker (1)
        • Jenkins (1)
        • AWS (1)
      • CS (26)
        • 자료구조 (13)
        • 운영체제 OS (12)
        • 데이터베이스 (1)
      • MySQL (7)
      • Git & GitHub (16)
        • Git (12)
        • Github Actions (1)
        • 기타(마크다운 등) (3)
      • 프로젝트 (2)
      • 리눅스 (6)
        • 기초 (6)
        • 리눅스 서버 구축하기 (0)
      • 후기 (3)
        • Udemy 리뷰 (3)
      • Python (12)
      • 레거시모음 (64)
        • 스프링 (11)
        • 자바 클래스&메소드 (1)
        • 오류해결 (18)
        • JSP & Servlet (12)
        • 자바스크립트 기초 (3)
        • React (2)
        • 이클립스 (1)
        • 알고리즘 문제풀이 (16)
      • 디자인패턴 (0)
  • 블로그 메뉴

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

    • 우진님
  • 공지사항

  • 인기 글

  • 태그

    Git
    파이썬
    GitHub
    스프링부트
    부스트캠프 멤버십
    부스트캠프 7기
    자바스크립트
    웹개발
    부스트캠프
    java
    jsp
    오류해결
    스프링
    Spring
    알고리즘
    MySQL
    자바
    os
    Python
    운영체제
  • 최근 댓글

  • hELLO· Designed By정상우.v4.10.0
gakko
[파이썬][백준] 2156번 포도주 시식
상단으로

티스토리툴바