Algorithm/백준 알고리즘
백준_2156 포도주 시식(JAVA) / DP
미스터로즈
2021. 3. 26. 08:49
시간 & 메모리 제한

문제

입력 & 출력

package com.Back;
import java.io.BufferedReader;
import java.io.InputStreamReader;
public class Back_2156 {
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine());
int [] cups = new int[N];
int [] dp = new int[N];
for (int i = 0; i < N; i++) {
cups[i] = Integer.parseInt(br.readLine());
}
//>=로 해야 하는 이유 -> N의 갯수가 커져도 포함해야 하기 때문이다.
// N이 1에서 3까지는 패턴이 동일하고 그 이후부터 변한다
if(N>=1) {
dp[0] = cups[0];
}
if(N>=2) {
dp[1] = cups[0]+cups[1];
}
if(N>=3) {
dp[2] = Math.max(dp[1], Math.max(cups[0] + cups[2], cups[1] + cups[2]));
}
for (int i = 3; i < N; i++) {
dp[i] = Math.max(dp[i-1], Math.max(dp[i-2]+cups[i], dp[i-3]+cups[i-1]+cups[i]));
}
System.out.println(dp[N-1]);
}
}
dp가 1 과 2인 경우는 누구나 쉽게 구할 수 있습니다.
dp가 3인경우 그리고 4보다 큰경우는 아래의 그림을 보면 쉽게 이해가 될거 같습니다.
