10,000 이하의 자연수로 이루어진 길이 N짜리 수열이 주어진다. 이 수열에서 연속된 수들의 부분합 중에 그 합이 S 이상이 되는 것 중, 가장 짧은 것의 길이를 구하는 프로그램을 작성하시오.
두 포인터로 풀이하였다.
구간을 하나씩 앞뒤로 조절하며 조건을 만족하는 경우에는 각각 결과값을 갱신해준다.
#include<iostream>
using namespace std;
int arr[100001];
int main(){
int N, S, Min_len=99999;
bool found=false;
cin>>N>>S;
for(int i=0; i<N; i++){
cin>>arr[i];
}
int head=0, tail=0, sum=0;
while(tail<=N){
if(sum<S){
sum+=arr[tail++];
} else {
found=true;
Min_len=min(Min_len, tail-head);
sum-=arr[head++];
}
}
if(found){
cout<<Min_len;
return 0;
} cout<<"0";
}

'알고리즘' 카테고리의 다른 글
| Boj 1149 c++ RGB거리 (0) | 2025.07.14 |
|---|---|
| Boj 16936 c++ 나3곱2 (4) | 2025.07.14 |
| Boj 12851 & 13913 c++ 숨바꼭질 2, 4 (0) | 2025.07.07 |
| Boj 1697 c++ 숨바꼭질 (백준 복귀) (0) | 2025.07.06 |
| Boj 23250 c++ 하노이 탑 K (0) | 2025.06.16 |