문제
https://www.acmicpc.net/problem/1912
문제해결
- dp 배열을 만들어 반복문을 돌면서 i번째 까지의 연속합 중 가장 큰 값을 dp배열에 담는다
- dp 배열 중 가장 큰 값이 연속합 중 가장 큰 값이 된다
- 맨 첫번째 숫자의 연속합은 자기 자신이므로 dp[0] = arr[0]으로 초기화 해준다
- 예제 1번의 수열일때
10 -4 3 1 5 6 -35 12 21 -1
dp 배열: [10, 6, 9, 10, 15, 21, -14, 12, 33, 32]
이렇게 i번째 숫자의 가장 큰 연속합이 dp 배열에 담겨있고 dp배열중 가장 큰 값이 33이므로 답은 33이 된다
import java.util.Scanner;
public class B1912_2 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int[] arr = new int[n];
for (int i = 0; i < n; i++) {
arr[i] = sc.nextInt();
}
int[] dp = new int[n];
// 맨 첫번째 숫자의 연속합은 자기 자신
dp[0] = arr[0];
//dp 배열에 i번째 연속합 중 가장 큰 값을 넣는다
for (int i = 1; i < n; i++) {
//i-1까지의 연속합 + i번째 숫자 or i번째 숫자 중 가장 큰 값이 dp[i]
dp[i] = Math.max(arr[i], dp[i-1] + arr[i]);
}
//가장 큰 연속합 찾기
int max = dp[0];
for (int i = 1; i < n; i++) {
max = Math.max(max, dp[i]);
}
System.out.println(max);
}
}
'[알고리즘] > 백준' 카테고리의 다른 글
백준 2225 자바 - 합분해 (0) | 2021.08.08 |
---|---|
백준 1699 자바 - 제곱수의 합 (0) | 2021.08.06 |
백준 14002 자바 - 가장 긴 증가하는 부분 수열 4 (0) | 2021.08.02 |
백준 11053 자바 - 가장 긴 증가하는 부분 수열 (0) | 2021.07.30 |
백준 2193 자바 - 이친수 (0) | 2021.07.27 |