Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 2839
- 쓰레드 풀
- 백준
- 서블릿
- Servlet
- dp
- 호유동
- 2020 KAKAO BLIND
- 맛집 투어
- 2589
- 다이나믹 프로그래밍
- 설탕 배달
- 2638
- 스프링
- 맛집
- mvc
- 완도산회
- 알고리즘
- HTTP API
- 고모네 콩탕
- Spring
- 문자열 압축
- BFS
- 프로그래머스
- 동적 프로그래밍
- 투어
- 스프링 MVC
- 양꼬치
- 포두부 보쌈
- 1로 만들기
Archives
- Today
- Total
프로그래밍 공방
[백준] 2156번 : 포도주 시식 본문
문제
2156번: 포도주 시식
효주는 포도주 시식회에 갔다. 그 곳에 갔더니, 테이블 위에 다양한 포도주가 들어있는 포도주 잔이 일렬로 놓여 있었다. 효주는 포도주 시식을 하려고 하는데, 여기에는 다음과 같은 두 가지 규
www.acmicpc.net
문제해결방법
이 문제는 DP 배열에 왼쪽부터 N번까지 마시며 최대로 마실 수 있는 값을 기록해가면서 풀었다.
N번 포도주를 마실때 계산해줘야 하는 경우는 아래와 같다.
1. N번 포도주를 안 마시는 경우 -> DP[i-1]
2. N번 포도주를 마시는 경우
- DP[N-2] + N번 포도주의 양 (N-1번을 건너뛰고 마시는 경우)
- DP[N-3] + N-1번 포도주의 양 + N번 포도주의 양 (N-2번을 건너뛰고 마시는 경우)
마지막으로 DP[N] 의 값이 최대로 마실 수 있는 양이 된다.
코드
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | package baekjoon; import java.io.BufferedReader; import java.io.InputStreamReader; public class Main2156_포도주시식 { public static int[] wine, DP; public static void main(String[] args) throws Exception { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); int N = Integer.parseInt(br.readLine()); wine = new int[N+3]; DP = new int[N+3]; for(int i=3; i<N+3; i++) { wine[i] = Integer.parseInt(br.readLine()); DP[i] = DP[i-1]; DP[i] = Math.max(DP[i], Math.max(DP[i-2], DP[i-3]+wine[i-1])+wine[i]); } System.out.println(DP[N+2]); } } | cs |
코드에 대한 피드백이나 더 좋은 아이디어는 언제나 환영입니다.
'개발 > 문제해결' 카테고리의 다른 글
[프로그래머스] 지형 이동 (0) | 2021.01.02 |
---|---|
[LeetCode] Median of Two Sorted Arrays (0) | 2021.01.01 |
[프로그래머스] 뉴스 클러스터링 (0) | 2020.12.30 |
[프로그래머스] 비밀지도 (0) | 2020.12.30 |
[프로그래머스] 보석 쇼핑 (0) | 2020.12.29 |