새소식

코테 준비/Java

[백준] #2559. 수열 (실버 3)

  • -

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

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

public class Main {
	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());  //합을 구할 연속적인 날짜의 수

		int[] nums = new int[n];
		st = new StringTokenizer(br.readLine());
		for (int i = 0; i < n; i++) {
			nums[i] = Integer.parseInt(st.nextToken());
		}


		int[] prefixSum = new int[n];
		prefixSum[0] = nums[0];
		for (int i = 1; i < n; i++) {
				prefixSum[i] = prefixSum[i - 1] + nums[i];
		}


		int maxSum = prefixSum[k - 1];  // 첫번째 구간의 합 (0 ~ k-1)

		for (int i = 1; i < n-k+1; i++) {
			int currentSum = prefixSum[i + k - 1] - prefixSum[i - 1];
			if (currentSum > maxSum) {
				maxSum = currentSum;
			}
		}
		System.out.print(maxSum);
	}
}

 

주의할 점

연속적인 K일의 온도의 합이 최대가 되는 값만 찾아 출력하면 되므로 따로 배열을 새로 만들지 않고 그냥 전체 누적합 배열을 사용하여 계산할 것

Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.