본문 바로가기
코딩테스트/BOJ

[백준] 2156번 - 포도주 시식

by 의정부핵꿀밤 2022. 10. 13.
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

댓글