이번 글에서는 숫자 배열을 인자로 받아, 인덱스가 n의 배수인 위치에 있는 요소들을 모두 더한 누적 합계를 반환하는 JavaScript 함수를 작성해 보겠습니다.
문제 이해하기
예를 들어 n이 3이라면, 인덱스 0, 3, 6, 9처럼 3의 배수에 해당하는 인덱스에 위치한 요소들만 골라서 그 합을 구해야 합니다. 이런 문제는 나머지 연산자(%)를 활용하면 간단하게 해결할 수 있습니다.
예시 코드
구현 코드는 다음과 같습니다.
const arr = [5, 3, 5, 6, 12, 5, 65, 3, 2];
const num = 3;
const nthSum = (arr, num) => {
let sum = 0;
for(let i = 0; i < arr.length; i++){
if(i % num !== 0){
continue;
}
sum += arr[i];
}
return sum;
};
console.log(nthSum(arr, num));
코드 동작 원리
이 함수는 다음 단계로 동작합니다.
- 합계를 저장할 변수 sum을 0으로 초기화합니다.
- for 반복문으로 배열의 모든 인덱스를 순회합니다.
- 나머지 연산자(%)로 현재 인덱스가 num으로 나누어떨어지는지 확인합니다.
- 나누어떨어지지 않으면 continue로 해당 반복을 건너뛰고, 나누어떨어지면 그 요소를 sum에 더합니다.
- 반복이 끝나면 최종 합계를 반환합니다.
예제 배열에서 인덱스 0, 3, 6에 위치한 요소는 각각 5, 6, 65이므로, 합계는 5 + 6 + 65 = 76이 됩니다.
출력 결과
위 코드를 실행하면 콘솔에 다음과 같이 출력됩니다.
76
대안: reduce를 활용한 함수형 접근
같은 로직을 reduce 메서드를 사용해 더 간결하게 표현할 수도 있습니다.
const nthSum = (arr, num) =>
arr.reduce((sum, val, idx) => idx % num === 0 ? sum + val : sum, 0);
console.log(nthSum(arr, num)); // 76
reduce는 배열을 순회하면서 각 요소와 인덱스를 콜백 함수로 전달하므로, 조건문 없이 한 줄로 누적 합계를 계산할 수 있습니다. 상황에 따라 가독성이 좋은 방식을 선택해 사용하면 됩니다.