티스토리 뷰
1. 문제
https://www.acmicpc.net/problem/2156
2156번: 포도주 시식
효주는 포도주 시식회에 갔다. 그 곳에 갔더니, 테이블 위에 다양한 포도주가 들어있는 포도주 잔이 일렬로 놓여 있었다. 효주는 포도주 시식을 하려고 하는데, 여기에는 다음과 같은 두 가지 규
www.acmicpc.net
2. 설명
반례를 생각못해서 틀렸었다.
연속해서 3잔을 못마신다는 의미에서 저번에 푼 계단 오르기(백준-2579) 문제랑 비슷했다.
따라서 식 구하는 것도 비슷하게 구하면 된다.
하지만 저번 문제와 다른점으로 이 문제에선 포도주를 연속해서 2번이상 안마실 수 있다.
따라서 이 반례를 고려해서 dp[n]을 구할 때 dp[n-1]과 비교하여 큰 값을 넣어줬다.
3. 코드
import java.util.StringTokenizer;
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));
StringTokenizer st = new StringTokenizer(br.readLine());
int n = Integer.parseInt(st.nextToken()); // 포도잔 개수
int[] wine = new int[10001];
int[] dp = new int[10001];
for(int i=1; i<=n; i++) {
st = new StringTokenizer(br.readLine());
wine[i] = Integer.parseInt(st.nextToken());
}
dp[1] = wine[1];
dp[2] = wine[1]+wine[2];
for(int i=3; i<=n; i++) {
dp[i] = Math.max(dp[i-2]+wine[i], dp[i-3]+wine[i-1]+wine[i]);
dp[i] = Math.max(dp[i-1], dp[i]);
}
System.out.println(dp[n]);
}
}
'알고리즘 풀이 > 백준' 카테고리의 다른 글
백준 10844 쉬운 계단 수 JAVA (DP) (0) | 2020.07.11 |
---|---|
백준 1912 연속합 JAVA (DP) (0) | 2020.07.08 |
백준 2193 이친수 JAVA (DP) (0) | 2020.07.06 |
백준 2579 계단 오르기 JAVA (DP) (0) | 2020.07.06 |
백준 1149 RGB거리 JAVA (DP) (0) | 2020.07.05 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday