[C++] 백준 2156번: 포도주 시식

2023. 1. 11. 00:52·problem solving/백준

🔗 문제

2156번: 포도주 시식

 

2156번: 포도주 시식

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

www.acmicpc.net

 

🖍 풀이

완전 탐색으로 풀면 시간 초과가 나와서 동적 계획법으로 풀어야 하는 문제였다. (경험담)

 

i번째 잔에는 선택권이 2개가 있다.

  • 마시거나
  • 마시지 않거나

통합

DP[i] = std::max(
	std::max(DP[i-2], DP[i-3] + W[i-1]) + W[i], // i번째 마신 경우
	DP[i-1]                                     // i번째 안 마신 경우 
);

 

💾  소스

#include <iostream>
#include <algorithm>

const int MAX = 10010;

int main()
{
	int N; 
	int W[MAX] = {0, };
	int D[MAX] = {0, };
	
	std::cin >> N;
	for(int i=0; i<N; ++i)
		std::cin >> W[i];
		
	D[0] = W[0]; D[1] = W[0] + W[1];
	for(int i=2; i<=N; ++i)
	{
		D[i] = std::max(D[i-1], (W[i] + std::max(W[i-1] + D[i-3], D[i-2])));
	}
	
	std::cout << D[N];
	return 0;
}
저작자표시 비영리 변경금지 (새창열림)
'problem solving/백준' 카테고리의 다른 글
  • [C++] 백준 16235번: 나무 재테크
  • [C++] 백준 1699번: 제곱수의 합
  • [C++] 백준 9465번: 스티커
  • [C++] 백준 2865번: 나는 위대한 슈퍼스타K (소수점 출력 방법)
u1qns
u1qns
http://github.com/u1qns
  • u1qns
    개발 블로그
    u1qns
  • 전체
    오늘
    어제
    • 분류 전체보기 (173) N
      • 회고 (1)
      • programming (17)
        • 개념 정리 (6)
        • CI CD (1)
        • 트러블 슈팅 (0)
        • 환경설정 및 팁 (7)
      • problem solving (155) N
        • 개념 정리 (3)
        • 백준 (129) N
        • SWEA (15)
        • 프로그래머스 (4)
  • 블로그 메뉴

    • 홈
    • 방명록
  • 링크

    • 깃허브
  • 공지사항

  • 인기 글

  • 태그

    SSAFY수료식
    C++
    boj
    SSAFY
    cmath
    투포인터
    되추적
    SWEA
    DFS
    구현
    완전탐색
    BFS
    삼성청년SW아카데미
    HELLOSSAFY
    DP
    POW
    cpp
    그리디
    백준
    미해결
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
u1qns
[C++] 백준 2156번: 포도주 시식
상단으로

티스토리툴바