백준/두 포인터

1806 부분합

have a good time 2024. 8. 2. 23:28

 

 

 

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
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());
       	  
       	  int sum[] = new int[N+1];
       	  st = new StringTokenizer(br.readLine(), " ");
       	  sum[0] = 0;
       	  
       	  for(int i=1; i<=N; i++) {
       		  sum[i] = Integer.parseInt(st.nextToken()) + sum[i-1];
       	  }      	 
       	 
       	  int left = 0;
       	  int right = 1;
       	  
       	  int value = 0;
       	  int result = Integer.MAX_VALUE;
       	  
       	  while(left<right && right<=N) {
       		  
       		  value = sum[right] - sum[left];
       	
       		  if(value>=S) {
       			  
       			  left++;  			 
       			  result = Math.min(result, right-left + 1);
       				    
       		  }else {
       			  right++;
       		  } 		  
       		  
       	  }
       	  
       	  // 합을 만드는 것이 불가능하다면 0을 출력
       	    if(result== Integer.MAX_VALUE) {
       		  
       		     result = 0;
       	     }
       	    
       	  System.out.println(result);     	  
       	  
    }
}