https://www.acmicpc.net/problem/2156
2156번: 포도주 시식
효주는 포도주 시식회에 갔다. 그 곳에 갔더니, 테이블 위에 다양한 포도주가 들어있는 포도주 잔이 일렬로 놓여 있었다. 효주는 포도주 시식을 하려고 하는데, 여기에는 다음과 같은 두 가지 규
www.acmicpc.net
이 문제는 DP 문제로 처음값과 두번째 값을 정해 준 뒤, 3번째 값부터는 dp[i-2]값과 array[i-1]값중 가장 큰 값이랑 array[i]값이랑 더한 후에, 구한 값과 dp[i-1]중 가장 큰 값을 찾으면 그 값이 해당 개수에서의 가장 큰 값이 된다.
그 후에 현재 array[i] 값에는 현재 값과 dp[i-2] 값을 더한 값으로 다시 세팅해주면 된다.
package DP;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
public class N2156F {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine());
ArrayList<Integer> array = new ArrayList<>();
for (int i = 0; i < n; i++) {
array.add(Integer.valueOf(br.readLine()));
}
if(n == 1){
System.out.println(array.get(0));
return;
}
if(n == 2){
System.out.println(array.get(0)+array.get(1));
return;
}
int[] dp = new int[n+2];
dp[0] = array.get(0);
dp[1] = array.get(0)+array.get(1);
for (int i = 2; i < n; i++) {
dp[i] = Math.max(array.get(i)+Math.max(dp[i-2],array.get(i-1)),dp[i-1]);
array.set(i,array.get(i)+dp[i-2]);
}
System.out.println(dp[n-1]);
}
}'백준문제 > DP' 카테고리의 다른 글
| 17953-디저트 (2) | 2023.03.10 |
|---|---|
| 1932-정수 삼각형 (0) | 2023.03.08 |
| 15486-퇴사2 (0) | 2023.03.07 |
| 2748-피보나치 수 2 (0) | 2023.02.04 |
| 1463-1로 만들기 (0) | 2023.02.04 |