알고리즘

C++ 알고리즘 - 2559 수열

마루설아 2025. 1. 28. 20:14

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

 

#include <bits/stdc++.h>
#define endl "\n"

using namespace std;

/******** 전역변수 ********/


/******** 함    수 ********/


int main(void) {
	/******** C++ INIT ********/
	ios::sync_with_stdio(false);
	cin.tie(NULL);
	cout.tie(NULL);

	/******** 지역변수 ********/
	int input1, input2;
	int num;
	int sum = 0;
	int left, right;

	vector<int> v;
	vector<int> v2;

	/******** 구    현 ********/
	cin >> input1 >> input2;

	// 벡터에 수열 삽입
	for (int i = 0; i < input1; i++) {
		cin >> num;
		v.push_back(num);
	}

	// 수열의 첫번째 합을 구하고 벡터에 삽입
	for (int i = 0; i < input2; i++) {
		sum += v[i];
	}

	v2.push_back(sum);

	// 다음 합을 구하기 위해 좌/우측 변수 지정 (투포인터?)
	left = 0;
	right = input2 - 1;

	// 합을 구해 벡터에 삽입
	for (int i = 0; i < v.size() - input2 + 1; i++) {
		// 첫번째 합에 left 값을 뺀 후,
		sum = v2[i] - v[left];
		
		// 각 투포인터에 인덱스 +1
		left++;
		right++;

		// 우측 포인터가 size를 넘어가면 반복 멈춤
		if (right >= v.size()) break;

		// +1 된 right값을 더한다
		sum += v[right];

		v2.push_back(sum);
	}
	
	// 가장 최대 값 출력
	cout << *max_element(v2.begin(), v2.end());
}