본문 바로가기
Beakjoon&프로그래머스/Java

[백준/Java] 2559번 수열

by 현장 2026. 1. 5.

-Code

import java.util.*;
import java.io.*;

public class BOJ2559 {
    public static void main(String[] args) throws IOException {
        BufferedReader br =
                new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine());

        int n = Integer.parseInt(st.nextToken());
        int k = Integer.parseInt(st.nextToken());
        //누적합 배열 만들기
        st = new StringTokenizer(br.readLine());
        int[] sumArr = new int[n + 1];
        int sum = 0;
        for (int i = 1; i <= n; i++) {
            sum += Integer.parseInt(st.nextToken());
            sumArr[i] = sum;
        }
        // 가장 큰 수 구하기
        int answer = Integer.MIN_VALUE;
        for (int i = k; i <= n; i++) {
            int nowSum = sumArr[i] - sumArr[i - k];
            answer = Math.max(answer, nowSum);
        }
        // 출력
        System.out.println(answer);
    }
}

처음에 누적합 배열에 크기를 n으로 지정하고 했으나 이렇게하면 처음 값을 검사할때 문제가 생겼습니다. 그래서 배열의 크기를 1을 더 늘려서 선언하고 arr[k] - arr[i - k]로 한칸씩 이동하며 계산해서 통과했습니다.