비내림차순으로 정렬된 수열이 주어질 때, 다음 조건을 만족하는 부분 수열을 찾으려고 합니다.
수열을 나타내는 정수 배열 sequence와 부분 수열의 합을 나타내는 정수 k가 매개변수로 주어질 때, 위 조건을 만족하는 부분 수열의 시작 인덱스와 마지막 인덱스를 배열에 담아 return 하는 solution 함수를 완성해주세요. 이때 수열의 인덱스는 0부터 시작합니다.
// 투포인터를 활용한 풀이
function solution(sequence, k) {
// start와 end를 0으로 지정해주고
// min은 자릿수를 계산하는 최소값인데 규칙에 있는 배열의 길이로 초깃값으로 해준다 (최대길이 1,000,000)
// sum 값은 배열의 0만넣어서 초기값으로 지정해주고
// result는 min이 바뀔때마다 인덱스를 저장해준다
let start = 0;
let end = 0;
let min = 1000001;
let sum = sequence[start];
let result = [];
// start나 end가 sequence.length 보다 반복문을 돌린다
while(start < sequence.length && end < sequence.length){
// sum k일떄
if(sum === k){
// 둘의 자릿수를 계산한겂이 기존 min보다 작으면 업데이트
// start,end 저장
if(end - start +1 < min){
min = end-start+1;
result = [start,end]
}
// sum에서 sequence[start]값을 뺴주고 start ++
sum -= sequence[start];
start++
// sum k 보다 작으면 위와같은 작업
}else if(sum > k){
sum -= sequence[start];
start++
// sum이 k보다 크면 end값을올리고 sequend[end]를 더해줌
}else{
end ++;
sum += sequence[end];
}
}
return result;
}