January 18, 2022
백준 문제 링크 : https://www.acmicpc.net/problem/1806
연속된 수들의 부분합 중 그 합이 S이상이 되는 것들 중, 가장 짦은 것의 길이를 구하는 문제이다.
import javax.rmi.ssl.SslRMIClientSocketFactory;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Collections;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
int N = Integer.parseInt(st.nextToken());
int S = Integer.parseInt(st.nextToken());
ArrayList<Integer> arr = new ArrayList<>();
st = new StringTokenizer(br.readLine());
long sum = 0;
for(int i=0; i<N; i++){
arr.add(Integer.parseInt(st.nextToken()));
sum+=arr.get(i);
}
if(sum < S){
System.out.println(0);
System.exit(0);
}
int lt = 0, rt = 0;
sum = arr.get(rt);
int answer = Integer.MAX_VALUE;
while(rt < N){
if(sum < S){
if(rt == N-1) break;
sum += arr.get(++rt);
} else {
// sum이 S보다 크거나 같을 때
answer = Math.min(answer, rt-lt+1);
sum -= arr.get(lt++);
}
}
System.out.println(answer);
}
}