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

2025. 1. 27. 09:58·Algorithm

백준 2156 포도주 시식 Silver I - JAVA 📌

https://www.acmicpc.net/problem/2156

문제 설명

문제 풀이


접근 💡

문제에서 주어진 조건 중 와인 3잔을 연속해서 마실 수 없다는 조건을 잘 생각해보자.

현재 위치에서 OOX, OXO, XOO의 경우를 생각해 볼 수 있는데, 이 경우 중에 어떤 경우가 제일 많이 먹을 수 있는 경우인지 판단해야 한다.

 

표로 그려 예시를 확인해보자. 현재 선택하고 있는 와인은 3번째 와인이라고 가정한다.

 

dp 배열을 만들어보자.

dp[1] = wine[1], dp[2] = wine[1] + wine[2]로 초기화 해준다.

 

 1. OOX 의 경우

와인순서 (i) 1 2 3 4 5 6
선택여부 O O X      

 

이 경우에는 dp[i - 1]이 된다.

 

2. OXO의 경우

와인순서 (i) 1 2 3 4 5 6
선택여부 O X O      

 

이 경우에는 dp[i - 2] + wine[i]가 된다.

 

3. XOO의 경우

와인순서 (i) 1 2 3 4 5 6
선택여부 X O O      

 

이 경우에는 dp[i - 3] + wine[i - 1] + wine[i]가 된다.

 

위 세가지 경우 중 최댓값을 dp[i]에 저장한다.

-> dp[i] = Math.max(dp[i - 1], Math.max(dp[i - 2] + wine[i], dp[i - 3] + wine[i - 1] + wine[i])

 

이 때 N이 1과 2가 들어오는 경우는 예외처리를 해주어야 한다.

N이 1일 경우 최대는 wine[1]이 된다.

N이 2일 경우 최대는 wine[1] + wine[2]가 된다.

코드 💡

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        int N = Integer.parseInt(br.readLine());
        int[] wine = new int[N + 1];
        for (int i = 1; i < N + 1; i++) {
            wine[i] = Integer.parseInt(br.readLine());
        }

        if (N == 1) {
            System.out.println(wine[1]);
            return;
        } else if (N == 2) {
            System.out.println(wine[1] + wine[2]);
            return;
        }

        int[] dp = new int[N + 1];
        dp[1] = wine[1];
        dp[2] = wine[1] + wine[2];

        for (int i = 3; i < N + 1; i++) {
            dp[i] = Math.max(dp[i - 1], Math.max(dp[i - 2] + wine[i], dp[i - 3] + wine[i - 1] + wine[i]));
        }
        System.out.println(dp[N]);

    }
}

'Algorithm' 카테고리의 다른 글

[백준] 3980 선발 명단 - JAVA  (0) 2025.01.29
[백준] 15662 톱니바퀴 (2) - JAVA  (1) 2025.01.27
[백준] 2512 예산 - JAVA  (0) 2025.01.19
[알고리즘] Topological Sort - 위상 정렬  (2) 2024.11.10
[TIP💡] 인텔리제이(Intellij)로 코딩테스트 환경 구성하기 (입출력을 txt로?)  (0) 2024.10.02
'Algorithm' 카테고리의 다른 글
  • [백준] 3980 선발 명단 - JAVA
  • [백준] 15662 톱니바퀴 (2) - JAVA
  • [백준] 2512 예산 - JAVA
  • [알고리즘] Topological Sort - 위상 정렬
의중
의중
  • 의중
    개발어려워
    의중
  • 전체
    오늘
    어제
    • 전체글 (29)
      • Algorithm (12)
      • SSAFY (1)
      • 자료구조 (4)
      • 운영체제 (2)
      • JAVA (2)
      • ML, DL (0)
      • BackEnd (4)
      • DevOps (1)
      • 네트워크 (3)
  • hELLO· Designed By정상우.v4.10.3
의중
[백준] 2156 포도주 시식 -JAVA
상단으로

티스토리툴바