[프로그래머스] 연속된 부분 수열의 합

Chobby·2023년 4월 10일
1

Programmers

목록 보기
188/349

해당 문제는 프로그래머스 박상현 님의 해설을 해석하여 작성되었습니다.

function solution(sequence, k) {
    let result = [0, 0]
    // 각 포인터 인덱스의 총합을 구한다.
    const sumVals = [0]
    sequence.forEach((a, i) => {
        sumVals.push(a+sumVals[i])
    })
    
    // 투 포인터 활용
    let left = 0
    let right = 0
    
    // 최소 범위
    let minRange = Infinity
    
    while(left <= right) {
        // left ~ right 까지의 합을 구함
        const sum = sumVals[right] - sumVals[left]
        
        if(sum === k) {
            // k와 같은 값 중 최소 범위인가?
            const curRange = right-1 - left
            if(minRange > curRange) {
                result = [left, right-1]
                minRange = curRange
            }
        }
        
        // sum과 비교한 값에 따른 포인터 이동
        if(sum < k) {
            right++
        } else {
            left++
        }
    }
    
    return result
}
profile
내 지식을 공유할 수 있는 대담함

0개의 댓글