https://www.acmicpc.net/problem/1806
10,000보다 작거나 같은 자연수의 길이 N의 시퀀스가 주어집니다. 이 수열에서 합이 S보다 크거나 같은 수열에서 가장 짧은 부분합의 길이를 구하는 프로그램을 작성하세요.
기입
첫 번째 줄은 N(10 ≤ N < 100,000) 및 S(0 < S ≤ 100,000,000)를 지정합니다. 두 번째 줄에는 시퀀스가 포함되어 있습니다. 시퀀스의 각 요소는 공백으로 구분되며 10,000 미만의 자연수입니다.
누르다
첫 번째 줄에서 찾으려는 최소 길이를 인쇄하십시오. 그러한 합을 형성할 수 없으면 0을 반환합니다.
골드 4는 비교적 간단한 문제입니다.
문제를 주의 깊게 읽으십시오.
합계가 s보다 크거나 같으면 0을 반환합니다!!
내 솔루션
#include <iostream>
using namespace std;
int main(){
int n;
int s;
int nums(100001)={0};
int minlen = 100001;
cin >> n >> s;
for (int i = 0; i < n; ++i){
cin >> nums(i);
}
int left = 0;
int right = 0;
int nowsum = nums(0);
while(right < n){
if (nowsum < s){
right++;
nowsum += nums(right);
}
if(nowsum >= s){
if(minlen > right-left+1){
minlen = right - left + 1;
}
nowsum -= nums(left);
left++;
}
}
if(minlen==100001) cout << 0;
else cout << minlen;
return 0;
}
![[자바] 백준 25757번:임스와 [자바] 백준 25757번:임스와](https://see.best-news.co.kr/wp-content/plugins/contextual-related-posts/default.png)