[백준] - 2559번 수열 JAVA

daheestory·2023년 5월 7일
0

<문제>

구간 합

누적 합 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);


    }
}
profile
꾸준히다히

0개의 댓글