키베이루's diary

[C++] 백준 2559번 수열 본문

알고리즘/기타

[C++] 백준 2559번 수열

키베이루 2022. 7. 8. 13:38

 

1) 문제설명

백준 Online Judge 2559번 수열

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

 

2559번: 수열

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

www.acmicpc.net

 

2) 아이디어

입력받은 배열의 누적합을 sum배열에 저장한다.

누적합에서 k번째 이후만큼을 빼주면 k일의 연속적인 날짜의 수의 누적합이 나온다.

이후 k일의 연속적인 날짜의 수의 누적 합의 최댓값을 출력한다.

 

3) 코드

#include<iostream>
#include<queue>
#include<deque>
#include<string.h>
#include<math.h>
#include<cmath>
#include<stack>
#include<algorithm>334

using namespace std;
int arr[100001];
int sum[100001];
int temp[100001];
int main() {
	int n, k;
	cin >> n >> k;
	for (int i = 0; i < n; i++) {
		scanf("%d", &arr[i]);
		sum[i] = arr[i] + sum[i - 1];
	}
	int result = -2147483648;
	for (int i = 0; i < n; i++) {
		if (i >= k-1) {
			temp[i] = sum[i] - sum[i - k];
		}
		else {
			temp[i] = -2147483648;
		}
		result = max(temp[i], result);
	}
	cout << result;
}
Comments