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

 

배열을 입력받고 슬라이딩 윈도우를 통해 k개 만큼의 합을 비교해가면서(i번째 위치의 합을 더해주고 제일 마지막 위치인 i-k번째의 합을 빼주면 된다) 최대합을 찾아내면 된다.

 

 

정답코드

#include <iostream>
#include <vector>

using namespace std;

int main()
{
	int n, k;
	cin >> n >> k; 

	vector<int> v(n, 0);

	// 배열 입력 
	for (int i = 0; i < n; i++) {
		cin >> v[i];
	}

	int sum = 0;
	for (int i = 0; i < k; i++)
	{
		sum += v[i];
	}

	int max_sum = sum;

	//슬라이딩 윈도우
	for (int i = k; i < n; i++)
	{
		sum += v[i] - v[i - k];
		max_sum = max(max_sum, sum);
	}

	cout << max_sum << "\n";

	return 0;
}

+ Recent posts