문제 - 부분합
처음에는 부분합이라는 이름때문에 부분합을 이용해서 풀려고했지만 아직 부분합알고리즘에 대해서 제대로 잘이용할 줄 몰라서 결국 투포인터를 활용해서 풀었다.
while(left <= right && right < N)
범위설정을 할때 위와 같이 설정을 했었다. 근데 left가 마지막인덱스까지 가지못하고 결국 끝나는 경우가 있기 때문에 배열의 범위를 N+1와 right <= N로 변경을 하여 마지막 인덱스까지 탐색할 수 있도록 설정해두었다.
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int N = sc.nextInt();
int S = sc.nextInt();
int ans = Integer.MAX_VALUE;
int arr[] = new int[N+1];
for(int i = 0; i < N; i++) {
arr[i] = sc.nextInt();
}
int left =0;
int right =0;
int sum = 0;
while(left <= right && right <= N)
{
if( sum < S)
{
sum += arr[right++];
}else{
ans = Math.min(ans, right - left);
sum -= arr[left++];
}
}
System.out.println(ans == Integer.MAX_VALUE ? 0 : ans);
}
}