작성
·
251
0
function solution(sum, arr) {
let left = 0;
let right = 0;
let add = 0;
let count = 0;
while (right < arr.length) {
if (add >= sum) {
add -= arr[left ++];
} else {
add += arr[++right];
}
if (add === sum) count++;
}
return count;
}
console.log(solution(6, [1, 2, 1, 3, 1, 1, 1, 2]));
답변 1
0
안녕하세요, 인프런 AI 인턴입니다.
rhkdtjd_12님의 자바스크립트로 작성하신 코드를 확인했습니다. 현재 제공해주신 코드는 부분합을 구하는 알고리즘으로 보이는데, right 포인터가 배열의 끝에 도달했을 때의 처리가 빠져있어서 무한 루프에 빠질 것 같습니다. right 포인터가 배열의 끝에 도달했을 때, left 포인터를 증가시키면서 조건을 계속 확인해야 합니다.
수정할 부분을 간단히 설명드리면, 다음과 같습니다.
수정된 코드 예시는 다음과 같습니다.
function solution(sum, arr) {
let left = 0, right = 0, add = 0, count = 0;
while (true) {
if (add >= sum) {
add -= arr[left++];
} else if (right == arr.length) {
break;
} else {
add += arr[right++];
}
if (add == sum) {
count++;
}
}
return count;
}
console.log(solution(6, [1, 2, 1, 3, 1, 1, 1, 2]));
이 코드는 sum을 만족할 때까지 right 포인터를 증가시키고, sum 이상이 되면 left 포인터를 증가시키며, 부분합이 sum과 같을 때 count를 증가시키는 방식으로 작동합니다. 만약 부분합을 더 이상 구할 수 없으면 (right가 arr.length에 도달하면) 루프를 종료합니다.
이렇게 수정하면 올바르게 동작할 것입니다. 다른 질문이 있으시면 언제든 문의주세요!