728x90
https://www.acmicpc.net/problem/2156
2156번: 포도주 시식
효주는 포도주 시식회에 갔다. 그 곳에 갔더니, 테이블 위에 다양한 포도주가 들어있는 포도주 잔이 일렬로 놓여 있었다. 효주는 포도주 시식을 하려고 하는데, 여기에는 다음과 같은 두 가지 규
www.acmicpc.net
와인을 3잔 연속으로 마실 수 없기 떄문에 현재 인덱스에서 OOX, OXO, XOO의 경우 중 최댓값을 선택해야 한다

예시를 들자면 위와 같이 볼 수 있다
OOX = dp[i-1]
OXO = dp[i-2] + arr[i]
XOO = dp[i-3] + arr[i-2] + arr[i-1]
위와 같은 점화식으로 계산하면 되고 0, 1, 2번쨰 인덱스는 예외처리 해준다
dp[0] = arr[0];
dp[1] = arr[0] + arr[1];
dp[2] = Math.max(dp[1], Math.max(arr[0]+arr[2], arr[1]+arr[2]));
자바 코드)
package boj;
import java.util.Scanner;
public class boj2156 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
int[] arr = new int[n];
int[] dp = new int[n];
for(int i=0;i<n;i++) {
arr[i] = scanner.nextInt();
}
dp[0] = arr[0];
for(int i=1;i<n;i++) {
if (i == 1) {
dp[1] = arr[0]+arr[1];
continue;
}
if(i==2) {
dp[2] = Math.max(dp[1], Math.max(arr[1]+arr[2], arr[0]+arr[2]));
continue;
}
dp[i] = Math.max(dp[i-1], Math.max(dp[i-2]+arr[i], dp[i-3]+arr[i-1]+arr[i]));
}
System.out.println(dp[n-1]);
}
}
참고)
https://velog.io/@yanghl98/%EB%B0%B1%EC%A4%80-2156-%ED%8F%AC%EB%8F%84%EC%A3%BC-%EC%8B%9C%EC%8B%9D
[백준] 2156 : 포도주 시식 (JAVA)
문제 > BOJ 2156 : 포도주 시식 - https://www.acmicpc.net/problem/2156 풀이 와인 3잔을 연속해서 마실 수 없기 때문에 현재 위치에서 OOX, OXO, XOO의 경우 중 어떤 것이 가장 많이 먹을 수 있는 경우인지 판단해
velog.io
728x90
'코딩테스트 > BOJ' 카테고리의 다른 글
[백준] 2206번 - 벽 부수고 이동하기 (0) | 2022.11.21 |
---|---|
[백준] 2225번 - 합분해 (0) | 2022.11.03 |
[백준] 9465번 - 스티커 (1) | 2022.10.13 |
[백준] 10825번 - 국영수 (0) | 2022.09.29 |
[백준] 11650번 - 좌표 정렬하기 (0) | 2022.09.28 |
댓글