백준

백준 1912 연속합(Java)

Park DJ 2023. 2. 5. 23:49

https://www.acmicpc.net/problem/1912

 

1912번: 연속합

첫째 줄에 정수 n(1 ≤ n ≤ 100,000)이 주어지고 둘째 줄에는 n개의 정수로 이루어진 수열이 주어진다. 수는 -1,000보다 크거나 같고, 1,000보다 작거나 같은 정수이다.

www.acmicpc.net


 

해석 및 팁

 


 

이 문제는 다이내믹 프로그래밍으로 풀면 되는 문제입니다. 푸는 방법은 이전 배열의 누적합 + 현재 값 과 현재 값을 비교하여 최댓값을 sum [] 배열에 저장해서 sum [] 배열의 최댓값을 구하면 됩니다.

 


 

Java 코드

 


import java.util.Scanner;

public class Main {
  public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);

    int n = sc.nextInt();
    int[] arr = new int[n];
    int[] sum = new int[n];

    for(int i = 0; i < n; i++) arr[i] = sc.nextInt();
    int max = arr[0];
    sum[0] = arr[0];
  
    for(int i = 1; i < n; i++) sum[i] = Math.max(sum[i - 1] + arr[i], arr[i]);

    for(int i = 0; i < n; i++) max = Math.max(max, sum[i]);
    
    System.out.println(max);
  }
}