와챠의 우당탕탕 코딩 일기장
[백준]동적 계획법1/연속합/1912 풀이 JAVA 본문
반응형
문제
n개의 정수로 이루어진 임의의 수열이 주어진다. 우리는 이 중 연속된 몇 개의 수를 선택해서 구할 수 있는 합 중 가장 큰 합을 구하려고 한다. 단, 수는 한 개 이상 선택해야 한다.
예를 들어서 10, -4, 3, 1, 5, 6, -35, 12, 21, -1 이라는 수열이 주어졌다고 하자. 여기서 정답은 12+21인 33이 정답이 된다.
입력
첫째 줄에 정수 n(1 ≤ n ≤ 100,000)이 주어지고 둘째 줄에는 n개의 정수로 이루어진 수열이 주어진다.
수는 -1,000보다 크거나 같고, 1,000보다 작거나 같은 정수이다.
출력
첫째 줄에 답을 출력한다.
풀이(JAVA)
예제2를 풀어보면 이렇다.
index | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
num | 2 | 1 | -4 | 3 | 4 | -4 | 6 | 5 | -5 | 1 |
dp | 2 | 3 | -1 | 3 | 7 | 3 | 9 | 14 | 9 | 10 |
과정 | 2 | 2+1 | 2 + 1 -4 | 3 | 3 + 4 | 3 + 4 - 4 | 3 + 4 - 4 + 6 | 3 + 4 - 4 + 6 + 5 | 3 + 4 - 4 + 6 + 5 - 3 | 3 + 4 - 4 + 6 + 5 - 3 + 1 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import java.io.*; | |
import java.util.StringTokenizer; | |
public class Main { | |
static int[] num; // N개의 정수 수열을 저장할 배열 | |
static Integer[] dp;// dp[n] = m; n번째 정수까지의 최대 연속 합은 m | |
static int find(int N) { | |
if (dp[N] == null) // 아직 최대 연속 합을 구하지 못했으면 | |
// N번째 정수까지의 최대 연속 합 = 이전 최대 연속 합 + 현재 정수 값과 현재 정수 값 중 최댓값 | |
dp[N] = Math.max(find(N - 1) + num[N], num[N]); | |
return dp[N]; | |
} | |
public static void main(String[] args) throws IOException { | |
BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); | |
// 정수 N 입력 | |
int N = Integer.parseInt(br.readLine()); | |
num = new int[N]; | |
dp = new Integer[N]; | |
// N개의 정수 수열 입력 | |
StringTokenizer st = new StringTokenizer(br.readLine()); | |
for (int i = 0; i < N; i++) | |
num[i] = Integer.parseInt(st.nextToken()); | |
// 초기화 | |
dp[0] = num[0]; | |
// 최대 연속 합 찾기 | |
find(N - 1); | |
// 최대 연속 합 구라기 | |
int max = dp[0]; | |
for (int i = 1; i < N; i++) | |
if (max < dp[i]) max = dp[i]; | |
// 출력 | |
System.out.println(max); | |
} | |
} |

반응형
'코딩 일기장 > 백준' 카테고리의 다른 글
[백준]그리디 알고리즘/동전0/11047 풀이 JAVA (0) | 2021.02.13 |
---|---|
[백준]동적 계획법1/평범한 배낭/12865 풀이 JAVA (0) | 2021.02.12 |
[백준]동적 계획법1/LCS/9251 풀이 JAVA (0) | 2021.02.08 |
[백준]동적 계획법1/전깃줄/2565 풀이 JAVA (0) | 2021.02.07 |
[백준]동적 계획법1/가장 긴 바이토닉 부분 수열/11054 풀이 JAVA (0) | 2021.02.01 |