🔺 문제
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
'코테 > 백준' 카테고리의 다른 글
[백준/JAVA] 12865번: 평범한 배낭 (0) | 2023.06.03 |
---|---|
[백준/JAVA] 11053번: 가장 긴 증가하는 부분 수열 (0) | 2023.06.02 |
[백준/JAVA] 2579번: 계단 오르기 (0) | 2023.06.01 |
[백준/JAVA] 1932번: 정수 삼각형 (0) | 2023.06.01 |
[백준/JAVA] 9655번: 돌 게임 (0) | 2023.05.31 |