GitHubSeob

C++ / 백준 / 2559 / 수열 본문

Baekjoon/Silver

C++ / 백준 / 2559 / 수열

GitHubSeob 2023. 12. 7.
문제

 

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

 

2559번: 수열

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

www.acmicpc.net

 

 

문제풀이

 

연속된 K개만큼의 누적합 중 가장 큰 값을 구하는 문제이다.

 

먼저 온도를 입력받는다.

0번 온도부터 K개만큼 온도의 합을 sum에 누적 합한다.

 

그다음 현재 누적합에서 가장 처음에 더한 값을 뺀다. (idx - K 번째 온도)

idx - K번째 온도값을 뺐으니 idx번째 온도를 더해 더한 온도의 개수를 K로 맞춘다.

max 함수를 이용해 answer의 최댓값을 갱신한다.

 

코드
#include <bits/stdc++.h>
using namespace std;

int main() {
	ios::sync_with_stdio(false);
	cin.tie(NULL);

	int N(0), K(0);
	cin >> N >> K;

	vector<int>temp(N, 0);
	int answer(0), sum(0);	

	for (int idx = 0; idx < N; ++idx) cin >> temp[idx];
	
	for (int idx = 0; idx < K; ++idx) sum += temp[idx];

	answer = sum;

	for (int idx = K; idx < N; ++idx) {
		sum -= temp[idx - K];
		sum += temp[idx];
		answer = max(answer, sum);		
	}

	cout << answer;
}

 

'Baekjoon > Silver' 카테고리의 다른 글

C++ / 백준 / 24498 / blobnom  (0) 2023.12.12
C++ / 백준 / 2428 / 표절  (0) 2023.12.09
C++ / 백준 / 5464 / 주차  (1) 2023.10.08
C++ / 백준 / 10025 / 게으른 백곰  (0) 2023.09.27
C++ / 백준 / 2641 / 다각형그리기  (0) 2023.09.24