[알고리즘] 가장 짧은 길이 찾기 - 슬라이딩 윈도우

bw1611·2023년 11월 7일
0
/**
 * 슬라이딩 원도우
 */
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의 길이를 구하여 리턴하면 정답이 된다.

profile
Java BackEnd Developer

0개의 댓글