728x90
반응형
1912 - 연속합
https://www.acmicpc.net/problem/1912
문제
n개의 정수로 이뤄진 임의의 수열
연속된 몇 개의 수를 선택해서 구할 수 있는 합 중 가장 큰 합
ex. 10, -3, 3, 1, 5, 6, -35, 12, 21, -1
-> 12 + 21 = 33
입력
첫째 줄: 정수 n (1 <= n <= 100,000)
둘째 줄: n개 정수로 이뤄진 수열
(-1,000 <= 수 <= 1,000)
출력: 가장 큰 합
풀이
- `dp[i]`: i번째 수로 끝나는 연속합 중 최댓값
- `dp[i] = Math.max(arr[i], dp[i - 1] + arr[i])`
- i부터 새로 시작하기 or 이전 값에 i를 추가로 더하기(i까지의 연속합)
코드
import java.io.*;
import java.util.*;
// 연속합
public class boj_1912 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine());
int[] dp = new int[n];
int[] arr = new int[n];
StringTokenizer st = new StringTokenizer(br.readLine());
for (int i = 0; i < n; i++) {
arr[i] = Integer.parseInt(st.nextToken());
}
dp[0] = arr[0];
int max = dp[0];
for (int i = 1; i < n; i++) {
dp[i] = Math.max(arr[i], dp[i - 1] + arr[i]);
max = Math.max(max, dp[i]);
}
System.out.println(max);
}
}
728x90
반응형
'Coding Test > BOJ' 카테고리의 다른 글
[BOJ/Greedy] 백준 1931 - 회의실 배정 (Java) (0) | 2025.04.27 |
---|---|
[BOJ/Greedy] 백준 11047 - 동전 0 (Java) (0) | 2025.04.27 |
[BOJ/DP] 백준 11055 - 가장 큰 증가하는 부분 수열 / 11053 - 가장 긴 증가하는 부분 수열 (Java) (0) | 2025.04.25 |
[BOJ/DP] 백준 14501 - 퇴사 / 15486 - 퇴사 2 (Java) (0) | 2025.04.24 |
[BOJ/DP] 백준 11726 - 2xn 타일링 / 11727 - 2xn 타일링 2 (Java) (0) | 2025.04.24 |