코테/백준

[백준/JAVA] 2156번: 포도주 시식

imname1am 2023. 6. 2. 01:41
반응형

🔺 문제

 

2156번: 포도주 시식

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

www.acmicpc.net

 

 

🔺 코드

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
import java.util.*;
import java.io.*;
 
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[] A = new int[n + 1];
 
        for(int i = 1 ; i <= n ; i++) {
            A[i] = Integer.parseInt(br.readLine());
        }
 
        int[] dp = new int[n + 1];
        dp[1= A[1];
        
        if(n >= 2) {
            dp[2= A[1+ A[2];
        }
        
        for(int i = 3 ; i <= n ; i++) {
            dp[i] = Math.max(dp[i - 1], Math.max(dp[i -2+ A[i], dp[i - 3+ A[i -1+ A[i]));
        }
 
        System.out.println(dp[n]);
    }
}
cs
✅ 해결 아이디어
✔ DP (Bottom-Up)
- dp[ i ] : i 번째 위치에서 최대로 마실 수 있는 값

 

와인을 3잔 연속으로 마실 수 없을 때 가능한,

최대로 마실 수 있는 경우의 수

1) oox : dp[i-1]

2) oxo : dp[i-2] + A[i]

3) xoo : dp[i-3] + A[i-1] + A[i]

 

이 세가지  중 최댓값을 dp 배열에 저장

 


🔺 다른 풀이들

- 헉 설명이 너무 직관적이고 보기 좋다... (복습용!)

 

[백준] 2156 : 포도주 시식 (JAVA)

문제 > BOJ 2156 : 포도주 시식 - https://www.acmicpc.net/problem/2156 풀이 와인 3잔을 연속해서 마실 수 없기 때문에 현재 위치에서 OOX, OXO, XOO의 경우 중 어떤 것이 가장 많이 먹을 수 있는 경우인지 판단해

velog.io

 


💬 느낀 점

이걸 어떻게 생각하나 .... 싶다가도

다른 분들 풀이글 보고 그러면 또 이해가 가고..

짧은 코드 길이에 내 머리를 한 번 더 쥐어박고... 그러고 있다ㅋㅋ

 

dp 너무 무서워하지 말자,,,

 

1회독 2회독 3회독 4회독 5회독
V        

(참고)

 

[백준] 2156번 : 포도주 시식 - JAVA [자바]

www.acmicpc.net/problem/2156 2156번: 포도주 시식 효주는 포도주 시식회에 갔다. 그 곳에 갔더니, 테이블 위에 다양한 포도주가 들어있는 포도주 잔이 일렬로 놓여 있었다. 효주는 포도주 시식을 하려고

st-lab.tistory.com

 

반응형