/**
* 슬라이딩 원도우
*/
public class Study2 {
public static int findShortestSubarrayLength(int[] nums, int target) {
int left = 0;
int sum = 0;
int minLength = Integer.MAX_VALUE;
for (int right = 0; right < nums.length; right++) {
sum += nums[right];
while (sum >= target) {
minLength = Math.min(minLength, right - left + 1);
sum -= nums[left];
left++;
}
}
return (minLength != Integer.MAX_VALUE) ? minLength : 0;
}
public static void main(String[] args) {
int[] nums = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
int target = 15;
int result = findShortestSubarrayLength(nums, target);
System.out.println("가장 짧은 길이: " + result);
}
}
1, 가장 짧은 배열의 길이를 찾기 위해 minLength 선언
2, right를 0부터 증가시키며 sum >= 15가 될 때까지 더해줍니다.
3, sum >= target보다 커지면 Math.min을 통해 right - left + 1을 해준다.
ex)
right : 4 (2 + 3 + 4 + 5 + 6 = 20) -> 0부터 카운트
left : 0
min = 5 (4 - 0 + 1)
4, sum을 nums[left]로 빼줍니다.(20이 넘는 최소 길이를 구하기 위해)
ex) 이해를 돕기 위해 위에 식을 참고하겠습니다.
sum = 20 - 2
5, 후 left++을 해줍니다.
6, while문 체크를 해줍니다. (18 >= 15) (trye면 while문 반복, false라면 for문으로 이동)
이후 반복!
min을 통해 가장 짧은 length의 길이를 구하여 리턴하면 정답이 된다.