크기 N인 정수형 배열 X가 있을 때, X의 부분 배열 중 원소의 합이 가장 큰 부분 배열 구하기(X의 연속한 일부분)
풀이 방법
구간합 구하는 문제가 주어지면, 누적합을 먼저 떠올린다.
누적 합 < 0이 되는 구간에 dp값을 0으로 초기화해준다.
누적합이 음수가 되는 순간 그 뒤에 있는 수들은 새로운 누적합(0)을 구하는게 더 최댓값을 가져오기 때문이다.
풀이 코드
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));
StringTokenizer st = new StringTokenizer(br.readLine());
int T = Integer.parseInt(st.nextToken());
for (int t = 0; t < T; t++) {
int N = Integer.parseInt(br.readLine());
int[] num = new int[N];
int[] dp = new int[N];
st = new StringTokenizer(br.readLine());
for (int i = 0; i < N; i++) {
num[i] = Integer.parseInt(st.nextToken());
}
int max = num[0];
dp[0]=num[0];
for (int i = 1; i < num.length; i++) {
if(dp[i-1]<0){
dp[i-1]=0;
}
dp[i]=dp[i-1]+num[i];
max = Math.max(max,dp[i]);
}
System.out.println(max);
}
}
}