알고리즘

백준 2259번 수열 (JAVA)

박카스마시며코딩 2021. 12. 11. 22:52

https://www.acmicpc.net/problem/2559

 

2559번: 수열

첫째 줄에는 두 개의 정수 N과 K가 한 개의 공백을 사이에 두고 순서대로 주어진다. 첫 번째 정수 N은 온도를 측정한 전체 날짜의 수이다. N은 2 이상 100,000 이하이다. 두 번째 정수 K는 합을 구하기

www.acmicpc.net

 

해당 문제는 슬라이딩 윈도우를 통해서 해결하였습니다.

저는 해당 문제를 풀면서 2가지를 간과하였습니다.

1. i >= k일때 결과값 초기화 

2. 결과값을 0으로 초기화

1번 같은 경우 n == k일 경우 결과값이 안나오게 됩니다. 이래서 i >= k-1일때부터 결과값을 초기화해야합니다.

무작정 계속 초기화하게 되면 k일보다 작은 경우도 들어가기 때문에 안됩니다.

2번 같은경우 현재 문제는 음수도 나올 수 있기 때문에 나올 수 있는 최소값으로 초기화하고 진행해야합니다.

 

 

package BOJ;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
import java.util.function.Function;

public class BOJ_2559 {

    public static void main(String[] args) throws Exception{
        BufferedReader br = new BufferedReader(new InputStreamReader (System.in));
        StringTokenizer st = new StringTokenizer(br.readLine()," ");
        Function<String,Integer> stoi = Integer::parseInt;
        int n = stoi.apply(st.nextToken());
        int k = stoi.apply(st.nextToken());
        int[] input = new int[n];
        int result = -100 * k;
        int sum = 0;
        st = new StringTokenizer(br.readLine()," ");
        for(int i = 0 ; i < n ; i++){
            int num = stoi.apply(st.nextToken());
            input[i] = num;
            sum += num;
            if(i >= k ){
                sum -= input[i-k];
            }
            if(i >= k-1){
                result = Math.max(result,sum);
//                System.out.println(result);
            }
//            System.out.println(sum);
        }
        System.out.println(result);
    }
}