Computer >> 컴퓨터 >  >> 프로그래밍 >> JavaScript

자바스크립트로 배열에서 n번째 요소들의 합 구하기

자바스크립트를 사용하다 보면 배열에서 특정 간격으로 떨어진 요소들만 골라 합산해야 하는 경우가 종종 있습니다. 이번 글에서는 숫자 배열과 정수 n을 입력받아, 인덱스가 n의 배수인 위치에 있는 모든 요소의 누적 합을 반환하는 함수를 만드는 방법을 알아보겠습니다.

문제 정의

예를 들어 다음과 같은 배열이 있다고 가정해봅시다.

const arr = [1, 4, 5, 3, 5, 6, 12, 5, 65, 3, 2, 65, 9];
const num = 2;

여기서 n = 2라면, 인덱스 0, 2, 4, 6, 8, 10, 12에 있는 요소들을 더해야 합니다. 즉, 배열의 첫 번째 요소부터 시작하여 매 두 번째 요소마다 값을 누적하는 방식입니다.

구현 방법 1: for 반복문 활용

가장 직관적인 방식은 for 반복문을 사용하는 것입니다. 반복하면서 현재 인덱스가 n의 배수인지 확인하고, 맞다면 해당 요소를 누적 변수에 더합니다.

const arr = [1, 4, 5, 3, 5, 6, 12, 5, 65, 3, 2, 65, 9];
const num = 2;

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));

실행 결과

위 코드를 실행하면 콘솔에 다음과 같은 값이 출력됩니다.

99

인덱스 0부터 시작해 매 두 번째 요소를 더한 과정은 다음과 같습니다.

1 + 5 + 5 + 12 + 65 + 2 + 9 = 99

구현 방법 2: filter와 reduce 조합

함수형 스타일을 선호한다면 filter()reduce()를 조합해 한 줄로 처리할 수도 있습니다.

const nthSum = (arr, num) =>
  arr.filter((_, i) => i % num === 0).reduce((a, b) => a + b, 0);

console.log(nthSum(arr, num)); // 99

filter()로 n의 배수 인덱스에 해당하는 요소만 남긴 뒤, reduce()로 전체 합을 계산하는 방식입니다. 코드가 간결하지만 중간 배열이 하나 더 생성되므로, 매우 큰 배열에서는 성능상 미세한 차이가 있을 수 있습니다.

마무리

두 방식 모두 시간 복잡도는 O(n)으로 동일합니다. 반복문 방식은 로직이 명확하게 드러나 초보자에게 유리하고, filter와 reduce 조합은 선언적인 코드로 가독성이 좋습니다. 상황과 팀의 코드 스타에 맞게 선택하면 됩니다.