본문 바로가기
Beakjoon&프로그래머스/Java

[백준/Java] 2156번 포도주 시식

by 현장 2026. 1. 16.

-Code

import java.io.*;
import java.util.*;

public class BOJ2156 {
    public static void main(String[] args) throws Exception {
        BufferedReader br =
                new BufferedReader(new InputStreamReader(System.in));

        int cnt = Integer.parseInt(br.readLine());
        // 와인 배열 초기화
        int[] wineVal = new int[cnt + 1];
        for (int i = 1; i <= cnt; i++) {
            wineVal[i] = Integer.parseInt(br.readLine());
        }
        // DP
        int[][] dp = new int[cnt + 1][3];
        for (int i = 1; i <= cnt; i++) {
            // 안고르는 경우
            dp[i][0] = Math.max(dp[i - 1][0], Math.max(dp[i - 1][1], dp[i - 1][2]));
            // 연속하지 않고 내거 고르는 경우
            dp[i][1] = dp[i - 1][0] + wineVal[i];
            // 연속해서 2개 고르는 경우
            dp[i][2] = dp[i - 1][1] + wineVal[i];
        }

        int answer = 0;
        for (int i = 0; i < 3; i++) {
            answer = Math.max(answer, dp[cnt][i]);
        }
        System.out.println(answer);
    }
}

처음에는 상태를 2개로 보고 작성해서 와인을 안고른 경우가 빠져서 문제가 생겼습니다. 그래서 안고른 상태도 고려해야 한다는 것을 알게된 후 해결하게 되었습니다.