연속되고 + 가변적인 부분 배열을 활용
O(n) 의 시간복잡도를 가진다.
투 포인트와 마찬가지고 연속되는 부분 배열을 활용해 특정 조건을 일치시키는 알고리즘이지만,
고정적인 부분 배열의 크기를 가진다.
연속된, 고정적인 부분 배열을 활용해 특정 조건을 일치시키는 알고리즘.

// 슬라이딩 윈도우: 윈도우 크기에 주의하자
package solution;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class BOJ10025_게으른백곰 {
static int N, K;
static int[] arr;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st;
//크기가 고정적 : K
//배열안의 연속적인 수의 합을 구함
// 슬라이딩 윈도우
st = new StringTokenizer(br.readLine());
N = Integer.parseInt(st.nextToken());
K = Integer.parseInt(st.nextToken());
arr = new int[1000001];
int gram, pos;
for (int i = 0; i < N; i++) {
st = new StringTokenizer(br.readLine());
gram = Integer.parseInt(st.nextToken());
pos = Integer.parseInt(st.nextToken());
arr[pos] = gram;
}
int size = 2*K+1;
int sum=0;
for (int i = 0; i < ((size<=arr.length)? size : arr.length); i++) {
sum += arr[i];
}
int max = sum;
for (int i = size; i < arr.length; i++) {
sum = sum - arr[i-size] + arr[i];
max = Math.max(max, sum);
}
System.out.println(max);
}
}
윈도우 크기가 배열의 크기보다 클 수도 있게 주어지는 문제라 배열인덱스초과에 유의하여야 한다
그림 덕분에 이해했습니다 감사합니다