BOJ 2156번 포도주 시식

|
package BOJ.Practice;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class BOJ_2156 {

    static int[] wine;
    static int[] answer;

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int n = Integer.parseInt(br.readLine());
        wine = new int[n+1];
        answer = new int[n+1];

        for(int i=1; i<=n; i++){
            wine[i] = Integer.parseInt(br.readLine());
        }
        // D(n) : n개 포도주가 주어졌을때, 마실수 있는 최대량
        // 1. n번째 포도주 마신 경우/ 안 마신 경우
        // 1-1. n번째 포도주 마신 경우
        //  1-1-1. n-1번째 와인 마신 경우 / 안 마신 경우
        //      1-1-1-1. n-1번째 와인 안 마신 경우 : D(n-2) + wine[n]
        //      1-1-1-2. n-1번째 와인 마신 경우 : D(n-3) + wine[n-1] + wine[n]
        // 1-2. n번째 포도주 안 마신 경우
        //  1-2-1. n-1번째 와인 마신 경우/ 안 마신 경우
        //      1-2-1-1. n-1번째 와인 안 마신 경우 : D(n-2)
        //      1-2-1-2. n-1번째 와인 마신 경우 : D(n-1)

        answer[1] = wine[1];
        if(n >= 2)
            answer[2] = wine[1] + wine[2];

        for(int i=3; i<=n; i++){
            answer[i] = Math.max(answer[i-2] + wine[i], answer[i-3] + wine[i-1] + wine[i]);
            answer[i] = Math.max(answer[i],answer[i-2]);
            answer[i] = Math.max(answer[i],answer[i-1]);
        }

        System.out.println(answer[n]);

    }
}