해당 문제는 프로그래머스 박상현 님의 해설을 해석하여 작성되었습니다.
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
}