Algorithm/백준
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());
}