
월세를 내야 하는 날은 n+1일, 최대 연속으로 일할 수 있는 날은 m일
날 마다 받는 일급이 달라 가장 많은 돈을 벌 수 있는 날들을 찾는 문제
슬라이딩 윈도우로 길이 m의 연속 부분합 중 최댓값을 구하는 문제!
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class 꿀_아르바이트 {
public static void main(String[] args) throws IOException{
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(bf.readLine());
//전체 날짜 수
int n = Integer.parseInt(st.nextToken());
//최대 일할 수 있는 날짜 수
int m = Integer.parseInt(st.nextToken());
//일급 입력받아 배열에 넣기
StringTokenizer st2 = new StringTokenizer(bf.readLine());
//int로 했을 때 틀렸다고 나와 long으로 변경(사이즈가 클 수 있음)
long[] salary = new long[n];
for (int i=0; i<n; i++) {
salary[i] = Long.parseLong(st2.nextToken());
}
//초기 윈도우 합을 max로 설정정
long sum = 0;
for (int i=0; i<m; i++) {
sum += salary[i];
}
long max = sum;
//슬라이딩 윈도우 수행
for (int i=m; i<n; i++) {
//윈도우 오른쪽으로 이동
sum = sum - salary[i-m] + salary[i];
//최댓값 갱신
max = Math.max(max, sum);
}
System.out.println(max);
}
}