개발 블로그
article thumbnail

 

아이디어

dp[i] 를 i 번째 숫자를 마지막으로 하는 최대부분배열의 합이라고 정의한다면 다음과 같은 점화식을 세울 수 있다.

 

dp[i] = Math.max(dp[i - 1], 0) + numbers[i]

 

i - 1 번째 숫자를 마지막으로 하는 최대부분배열의 합이 음수라면 i 번째 숫자만으로 이루어진 배열이 i 번째 숫자를 마지막으로 하는 최대부분배열이 되기 때문이다.

 

 

풀이코드

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 br = new BufferedReader(new InputStreamReader(System.in));
        StringBuilder sb = new StringBuilder();

        int T = Integer.parseInt(br.readLine());
        for (int t = 0; t < T; t++) {
            int N = Integer.parseInt(br.readLine());

            int[] numbers = new int[N + 1];
            StringTokenizer st = new StringTokenizer(br.readLine());
            for (int i = 1; i <= N; i++) {
                numbers[i] = Integer.parseInt(st.nextToken());
            }

            int[] dp = new int[N + 1];
            int result = Integer.MIN_VALUE;
            for (int i = 1; i <= N; i++) {
                dp[i] = Math.max(dp[i - 1], 0) + numbers[i];
                result = Math.max(result, dp[i]);
            }

            sb.append(result).append("\n");
        }

        System.out.println(sb);
    }
}

'Algorithm > 백준 알고리즘' 카테고리의 다른 글

1932번. 정수 삼각형  (1) 2023.10.27
1012번. 유기농 배추  (0) 2023.10.27
11256번. 사탕  (0) 2023.10.27
1629번. 곱셈  (0) 2023.10.26
13699번. 점화식  (0) 2023.10.26
profile

개발 블로그

@하얀.손

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!