본문 바로가기

Algorithm/Baekjoon

[백준_JAVA_알고리즘] 1912 연속합 #DP

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
        int n = Integer.parseInt(bufferedReader.readLine());
        int[] arr = new int[n];
        int[] dp = new int[n];
        StringTokenizer stringTokenizer = new StringTokenizer(bufferedReader.readLine());

        for(int i = 0; i < arr.length; i++)
            arr[i] = Integer.parseInt(stringTokenizer.nextToken());

        dp[0] = arr[0];
        int max = dp[0];

        for(int i = 1; i < arr.length; i++){
            dp[i] = Math.max(dp[i-1] + arr[i], arr[i]);
            max = Math.max(max, dp[i]);
        }
        System.out.println(max);
    }
}

매 단계마다 max 값을 갱신하여 최대 합을 저장합니다.

dp[i-1]을 활용하기 위해서는 for문의 범위를 for(int i = 1; i < arr.length; i++)으로 작성해야 합니다.

 

.

.

.

 

문제는 아래에서 확인할 수 있습니다.

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