구간 합
누적 합 S[] 를 생성한 후
부분 합 rangeSum = S[i] - S[i-day] 의 최대 값을 구해준다.
처음에 result 값을 0으로 설정하여 음수일 때의 최대 값을 받아들이지 못해 오류가 났었다. -100이 100,000개 있을 것을 가정하여 최소 값보다 작도록 -10000001 을 설정했다.
rangeSum을 배열로 만들었다가 for문에서 i의 범위 지정이 애매해져서 배열 생성 없이 바로 최대 값 측정을 해주었다.
import java.io.*;
import java.util.*;
public class Main {
public static void main(String args[]) throws IOException{
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(bf.readLine()); //N과 M한번에 받음
int num = Integer.parseInt(st.nextToken());
int day = Integer.parseInt(st.nextToken());
int[] S = new int[num + 1]; //합 배열
int result = -10000001;
st = new StringTokenizer(bf.readLine());
for(int i = 1; i <= num; i++) {
S[i] = S[i-1] + Integer.parseInt(st.nextToken());
}
for(int i = day; i<=num; i++){
int rangeSum = S[i] - S[i-day];
if (rangeSum>result){
result = rangeSum;
}
}
System.out.println(result);
}
}