문제 풀이/백준

[백준] 1912번. 연속합(JAVA)

27200 2024. 11. 19. 15:35

문제

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 배열를 정렬하여 최대값을 찾는다.