연속된 수들의 부분합 중에 그 합이 S 이상이 되는 것 중에 가장 짧은 것의 길이를 구하는 문제이며 투포인터 알고리즘을 사용하면 된다.
15 이상인 수 중에 가장 짧은 것의 길이는 5+10, 10+7 인 2이다.
만약 이러한 합을 만드는 것이 불가능하다면 0을 출력하면된다.
#include <bits/stdc++.h>
using namespace std;
int main()
{
ios::sync_with_stdio(0);
cin.tie(0);
int n, S;
cin >> n >> S;
vector<int> V(n);
for (int i = 0; i < n; ++i)
cin >> V[i];
int s = 0, e = 0, ans = n, sum = 0, idx;
bool flag = true;
while (true)
{
if (sum >= S)
{
sum -= V[s++];
idx = e - s + 1;
ans = min(ans, idx);
flag = false;
}
else if (e == n) break;
else sum += V[e++];
}
if (flag == true)
cout << 0 << '\n';
else
cout << ans << '\n';
}