Notice
Recent Posts
Recent Comments
Link
«   2025/06   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
Archives
Today
Total
관리 메뉴

전공공부

[BOJ_2156] 포도주 시식 본문

Study/Problem Solving

[BOJ_2156] 포도주 시식

monitor 2024. 2. 21. 06:16

설명


계단 오르기 문제와 유사하다고 생각이 들었고 정말로 비슷하게 점화식을 수행하였습니다.

 

다만, Case가 연속된 3 Case를 구현하여야 하기 때문에 이전의 한 계단, 두 계단만 고려하던 연속적인 부분을 3케이스로 나누어서 선택하였습니다. 하나는 모두 3개를 선택하는 경우, 이전의 연속된 2개만 선택하는 경우, 현재 케이스를 스킵합니다.

 

헷갈릴 수 있는 부분이 제가 wine 배열은 N 개로 짜서 코드를 볼 때 인덱스 위치가 다르다는걸 감안해주셔야 합니다.

 

코드


import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

/**
 * 계단 오르기 문제와 비슷하여 접근이 쉬웠습니다.
 */
public class BOJ_2156 {
    public static void main(String[] args) throws Exception{
        BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer tk = new StringTokenizer(in.readLine()," ");

        int N = Integer.parseInt(tk.nextToken());
        int[] wine = new int[N];
        for (int i = 0; i < N; i++){
            tk = new StringTokenizer(in.readLine()," ");
            wine[i] = Integer.parseInt(tk.nextToken());
        }
        int[] dp = new int[N + 1];
        dp[1] = wine[0];
        if(N >= 2) {
            dp[2] = dp[1] + wine[1];
            if(N > 2) {
                for (int i = 3; i <= N; i++) {
                    dp[i] = Math.max(dp[i - 1], Math.max(dp[i - 2] + wine[i - 1], dp[i - 3] + wine[i - 2] + wine[i - 1]));
                }
            }
        }
        System.out.println(dp[N]);
    }
}

 

 

2156번: 포도주 시식

효주는 포도주 시식회에 갔다. 그 곳에 갔더니, 테이블 위에 다양한 포도주가 들어있는 포도주 잔이 일렬로 놓여 있었다. 효주는 포도주 시식을 하려고 하는데, 여기에는 다음과 같은 두 가지 규

www.acmicpc.net

 

'Study > Problem Solving' 카테고리의 다른 글

[BOJ_15489] 파스칼의 삼각형  (0) 2024.02.25
[BOJ_21317] 징검다리 건너기  (1) 2024.02.25
[BOJ_1890] 점프  (0) 2024.02.21
[BOJ_2407] 조합  (0) 2024.02.19
[BOJ_1010] 다리놓기  (0) 2024.02.14