이번 문제는 투 포인터 알고리즘으로 쉽게 풀 수 있는 문제였다. 이중 for문으로도 해결 가능하지만 시간 제한에 걸리게 된다.
투 포인터 알고리즘
#include <iostream>
#include <algorithm>
#define MAX 100001
using namespace std;
int n, s;
int arr[MAX];
int cnt=MAX;
int sum=0;
int Min(int a, int b){
if(a>b)
return b;
else
return a;
}
void Input(){
cin>>n>>s;
for(int i=0; i<n; i++){
cin>>arr[i];
}
}
void Solution(){
int start=0;
int end=0;
while(start<=end){
if(sum>=s){
cnt=Min(cnt, end-start);
sum-=arr[start++];
}
else if(end==n)
break;
else
sum+=arr[end++];
}
if(cnt==MAX)
cout<<0<<endl;
else{
cout<<cnt<<endl;
}
}
int main(){
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
Input();
Solution();
return 0;
}