문제 링크
https://www.acmicpc.net/problem/2156
풀이
dp는 상향과 하향식이 있는데 개인적으로는 하향식(bottom-up)을 선호한다.
포도주를 마시기 위한 3가지 조건을 잘 알아야 하는데,
하나도 모르겠어서 난항을 겪었던 문제.
3번째 경우가 조금 헷갈렸다. (복습 필요)
최종 코드
import java.io.BufferedReader;
import java.io.IOException;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new java.io.InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine()); // 포도잔의 개수
int[] arr = new int[N + 1];
int[] dp = new int[N + 1];
for(int i = 1; i <= N; i++) {
arr[i] = Integer.parseInt(br.readLine());
}
dp[1] = arr[1];
if (N > 1) {
dp[2] = arr[1] + arr[2];
}
for (int i = 3; i <= N; i++) {
int first = dp[i-2] + arr[i];
int second = dp[i-3] + arr[i-1] + arr[i];
int third = dp[i-1];
dp[i] = max(first, second, third);
}
System.out.println(dp[N]);
}
static int max (int a, int b, int c) {
return Math.max(a, Math.max(b, c));
}
}