일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- MYSQL
- Spring Security
- n과 m
- DB
- 다이나믹 프로그래밍
- 백트래킹
- 배포
- 재귀
- JPA
- springboot
- dfs
- 너비 우선 탐색
- 정수론
- 프로그래머스
- 알고리즘
- 구현
- 스택
- 브루트포스 알고리즘
- Vue
- 그래프 탐색
- 소수 판정
- 수학
- 프로젝트
- 자료 구조
- SWEA
- 문자열
- 깊이 우선 탐색
- 그래프 이론
- 백준
- 정보처리기사
Archives
- Today
- Total
영원히 남는 기록, 재밌게 쓰자
백준 [2156] 포도주 시식 (자바) 본문
728x90
반응형
문제
입력
첫째 줄에 포도주 잔의 개수 n이 주어진다. (1 ≤ n ≤ 10,000) 둘째 줄부터 n+1번째 줄까지 포도주 잔에 들어있는 포도주의 양이 순서대로 주어진다. 포도주의 양은 1,000 이하의 음이 아닌 정수이다.
출력
첫째 줄에 최대로 마실 수 있는 포도주의 양을 출력한다.
풀이
연속적으로 2개를 초과하는 포도주를 선택하여 마실 수 없다.
i번째 포도주를 마실 때 누적합의 최대 값은 다음과 같다.
- i-1번째까지의 누적합
- i-2번째까지의 누적합 + i번째 값 (예: 4번째 누적합을 구한다고 가정하면 2번째 누적합(1~2까지 더한 값) + 3번째는 건너뛰고 4번째 값)
- i-3번째까지의 누적합 + i-1번째 값 + i번째 값
위 3개의 값 중 가장 큰 값이 i번째 포도주를 마실 때 최대로 마실 수 있다.
정답코드
package com.baekjoon.p2156;
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[] arr = new int[N + 1], dp = new int[N + 1];
for (int i = 1; i <= N; i++) {
arr[i] = Integer.parseInt(br.readLine());
}
dp[1] = arr[1];
if (N > 1) {
dp[2] = arr[1] + arr[2];
}
for (int i = 3; i <= N; i++) {
dp[i] = Math.max(dp[i - 1], Math.max(dp[i - 2] + arr[i], dp[i - 3] + arr[i - 1] + arr[i]));
}
System.out.print(dp[N]);
}
}
728x90
반응형
'Algorithm > 백준' 카테고리의 다른 글
백준 [24444] 알고리즘 수업 - 너비 우선 탐색 1 (자바) (0) | 2024.05.28 |
---|---|
백준 [11060] 점프 점프 (자바) (0) | 2024.05.28 |
백준 [2961] 도영이가 만든 맛있는 음식 (자바) (0) | 2024.05.24 |
백준 [15990] 1, 2, 3 더하기 5 (자바) (0) | 2024.05.24 |
백준 [1138] 한 줄로 서기 (자바) (0) | 2024.05.21 |