문제
https://www.acmicpc.net/problem/1912
풀이(15분)
import java.util.*;
import java.io.*;
class Main {
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine());
int[] arr = new int[N];
StringTokenizer st = new StringTokenizer(br.readLine());
for (int i = 0; i < N; i++) {
arr[i] = Integer.parseInt(st.nextToken());
}
int[] dp = new int[N];
dp[0] = arr[0];
for (int i = 1; i < N; i++) {
dp[i] = Math.max(arr[i], dp[i - 1] + arr[i]);
}
Arrays.sort(dp);
System.out.println(dp[N-1]);
}
}
누적합과 dp의 혼합형 문제이다.
1. 이전 dp의 값에 현재 값을 더하는 것 vs 새로운 값으로 시작하는 것을 비교한다.
2. 이 중 더 큰 값을 취한다.
3. 최종적으로 생성된 dp 배열를 정렬하여 최대값을 찾는다.
'문제 풀이 > 백준' 카테고리의 다른 글
[백준] 2156번. 포도주 시식(JAVA) (1) | 2024.11.21 |
---|---|
[백준] 4948번. 베르트랑 공준(JAVA) (0) | 2024.11.20 |
[백준] 17219번. 비밀번호 찾기(JAVA) (0) | 2024.11.18 |
[백준] 6064번. 카잉 달력(JAVA) (0) | 2024.11.17 |
[백준] 21736번. 헌내기는 친구가 필요해(JAVA) (1) | 2024.11.17 |