ALGORITHM/슬라이딩 윈도우

Sliding Window - minSubArrayLen

KimMinJun 2022. 8. 13. 22:32

Q. 배열의 연속된 요소들로 이루어진 합 중에서 주어진 수의 이상의 값을 가지는 배열 중 가장 작은 길이를
구하시오

 

const minSubArrayLen = (arr, n) => {
    let sum = 0;
    let len = Infinity;
    let p1 = 0;
    let p2 = 0;
    
    while(p1 < arr.length) {
        // sum이 n보다 작고, p2가 배열의 끝에 다다르기 전이라면
        if(sum < n && p2 < arr.length) {
            // sum에 arr[p2]를 더해주고 p2에 1을 더해줌
            sum += arr[p2++];
        }
        // sum이 n이상이라면,
        else if(sum >= n) {
            // 기존의 len과 현재의 len중에 최솟값 구하기
            len = Math.min(len, p2-p1);
            // sum에서 arr[p1]의 값을 빼주고, p1에 1을 더해줌
            sum -= arr[p1++];
        }
        // p2가 arr의 끝에 다다랐다면 값을 구할 수 없으므로 break
        else break;
    }
    return len === Infinity ? 0 : len;
};