전체 방문자
오늘
어제
모달조아
Better than yesterday
모달조아
  • 분류 전체보기 (147)
    • PS (86)
      • BOJ (79)
      • 프로그래머스 (6)
    • 이론 (41)
      • 자료구조 (2)
      • 알고리즘 (8)
      • 데이터베이스 (1)
      • 운영체제 (1)
      • 네트워크 (3)
      • 디자인패턴 (7)
      • Java (13)
      • Spring (4)
      • JPA (1)
      • Git (1)
    • 개발 (18)
    • 프로젝트 (1)
    • 기록 (0)
      • 후기 (0)
    • etc (1)

최근 글

티스토리

hELLO · Designed By 정상우.
모달조아

Better than yesterday

BOJ 2156 포도주 시식
PS/BOJ

BOJ 2156 포도주 시식

2021. 7. 1. 23:17

boj 2156 포도주 시식

포도주 잔을 마시는 경우를 맨 마지막 포도주 잔의 상태에 따라 나눌 수 있다.

  1. 맨 마지막 포도주 잔을 안마시는 경우
  2. 맨 마지막 포도주 잔을 마시는데, 그 잔이 연속된 첫번째 잔인 경우
  3. 맨 마지막 포도주 잔을 마시는데, 그 잔이 연속된 두번째 잔인 경우

그림으로 표현하면 다음과 같다.

arr는 포도주 잔의 양을 담는 배열이고, D[i]는 i번째 잔까지 포도주를 최대로 마시는 양으로 테이블을 정한다.

  1. D[i] = D[i-1]
  2. D[i] = D[i-2] + arr[i]
  3. D[i] = D[i-3] + arr[i-1] + arr[i]

위 세 가지를 비교해서 가장 큰 값을 D[i]로 결정하면 된다. 코드로 구현해보자.

#include <iostream>
#include <algorithm>
using namespace std;

int n;
int D[10005];
int arr[10005];

int main(void)
{
    ios_base::sync_with_stdio(0);
    cin.tie(0);

    cin >> n;
    for (int i = 1; i <= n; i++) cin >> arr[i];

    D[1] = arr[1];
    D[2] = arr[1] + arr[2];
    for (int i = 3; i <= n; i++)
    {
        D[i] = max(D[i - 1], D[i - 3] + arr[i - 1] + arr[i]);
        D[i] = max(D[i], D[i - 2] + arr[i]);
    }
    cout << D[n];
}
저작자표시 (새창열림)

'PS > BOJ' 카테고리의 다른 글

BOJ 11053 가장 긴 증가하는 부분 수열  (0) 2021.07.04
BOJ 7576 토마토  (0) 2021.07.01
BOJ 9465 스티커  (0) 2021.07.01
BOJ 2193 이친수  (0) 2021.06.29
BOJ 11057 오르막 수  (0) 2021.06.29
    'PS/BOJ' 카테고리의 다른 글
    • BOJ 11053 가장 긴 증가하는 부분 수열
    • BOJ 7576 토마토
    • BOJ 9465 스티커
    • BOJ 2193 이친수
    모달조아
    모달조아

    티스토리툴바