#include <iostream>
#include <algorithm>
using namespace std;
int n,m;
int V[500001];
void INPUT()
{
ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
cin >> n >> m;
for(int i = 0; i < n; i++) cin >> V[i];
}
void SOLVE()
{
// Two Pointer
int start = 0,end = 0;
int sum = V[0];
int ans = 0;
while(end < n)
{
if(sum <= m)
{//막은 구멍의 부피가 m이하라면
ans = max(ans,sum); //최댓값 갱신 후
sum += V[++end]; //오른쪽 포인터 옮기기
}
else
{//막은 구멍의 부피가 m보다 클 때
if(start == end)
{//양 포인터의 위치가 같다면 둘 다 오른쪽으로 옮긴다.
start++;
end++;
sum = V[start];
}
//양 포인터의 위치가 다르다면 왼쪽 포인터 옮기기
else sum -= V[start++];
}
}
cout << ans;
}
int main()
{
INPUT();
SOLVE();
}
GOLD5 미만 난이도는 알고리즘 및 풀이 설명을 주석으로 대체합니다.
주석을 참고해주세요.