코딩테스트/BOJ

[BOJ] 2559 수열 - JAVA

5월._. 2022. 2. 14.
728x90

1. 문제

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

 

2559번: 수열

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

www.acmicpc.net

N개의 수열 중 K만큼 연속적인 합을 구한 뒤, 그 중 가장 큰 합을 출력한다.


2. 풀이

1. sum, MAX 변수를 만들고 숫자를 받아가면서 sum과 queue에 더한다.

2. queue의 사이즈가 5가 되었다면 최대값을 다시 비교하고, 다음 값 비교를 위해 sum에서 큐의 가장 앞 원소(front)를 뺀다. 

3. 최대값을 출력한다.

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

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

        int N = Integer.parseInt(st.nextToken());
        int K = Integer.parseInt(st.nextToken());

        st = new StringTokenizer(in.readLine());

        int MAX = Integer.MIN_VALUE;
        int sum = 0;
        Queue<Integer> queue = new LinkedList<>();
        for(int n=0;n<N;n++) {
            int num = Integer.parseInt(st.nextToken());
            queue.offer(num);
            sum += num;
            if(queue.size()==K) {
                MAX = Math.max(MAX,sum);
                sum -= queue.poll();
            }
        }

        System.out.println(MAX);
    }
}

3. 결과

 

'코딩테스트 > BOJ' 카테고리의 다른 글

[BOJ] 10709 기상캐스터 - JAVA  (0) 2022.02.16
[BOJ] 2527 직사각형 - JAVA  (0) 2022.02.16
[BOJ] 2304 창고 다각형 - JAVA  (0) 2022.02.14
[BOJ] 1244 스위치 켜고 끄기 - JAVA  (0) 2022.02.13
[BOJ] 2628 종이자르기 - JAVA  (0) 2022.02.13

댓글