Algorithm/baekjoon

연속합

마닐라 2022. 2. 15. 15:21

📍 문제 설명

 

💡 접근

dp[n]을 n번 인덱스를 마지막 항으로 하는 최대합으로 한다.

이전 항의 최대합 + 현재항, 현재항 중에서 큰 값을 넣는다.

 

👩‍💻 코드

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.*;

public class Main {
    static int n, m, answer;
    static int[][] board;
    static int[] arr, dp;
    static boolean[][] visited;
    static int[] dx = {-1,1,0,0};
    static int[] dy = {0,0,-1,1};
    static ArrayList<String> list = new ArrayList<>();
    static StringBuilder sb = new StringBuilder();
    public static void main(String[] args) {
        Scanner kb = new Scanner(System.in);
        Main T = new Main();
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        int n = kb.nextInt();
        arr = new int[n];
        for(int i = 0; i < n; i++) {
            arr[i] = kb.nextInt();
        }
        //dp[n]은 n번 인덱스를 마지막 항으로 하는 최대 합
        //여기서는 떨어져있으면 안되고 연속된 숫자여야한다.
        dp = new int[n];
        dp[0] = arr[0];
        answer = arr[0];

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

    private void solution() {
    }

}

'Algorithm > baekjoon' 카테고리의 다른 글

RGB거리  (0) 2022.02.15
제곱수의 합  (0) 2022.02.15
가장 긴 증가하는 부분 수열 4  (0) 2022.02.15
가장 긴 증가하는 부분 수열  (0) 2022.02.15
이친수  (0) 2022.02.15