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

JavaScript 배열의 교차 곱셈 합계 구하는 방법

문제 이해하기

숫자 배열을 입력받아, 인접한 두 요소씩 짝지어 곱한 뒤 그 곱들을 모두 더한 값을 반환하는 JavaScript 함수를 작성해야 합니다. 쉽게 말해 0번째와 1번째 요소, 2번째와 3번째 요소처럼 두 개씩 묶어 곱하고, 각 곱셈 결과의 합을 구하는 방식입니다.

예를 들어, 다음과 같은 배열이 있다고 가정해 보겠습니다.

const arr = [1, 2, 4, 1, 2, 3, 4, 3];

이 경우 출력값은 아래와 같은 과정으로 계산됩니다.

1*2 + 4*1 + 2*3 + 4*3
= 2 + 4 + 6 + 12

따라서 최종 출력 결과는 다음과 같습니다.

24

구현 코드

배열 내장 메서드인 reduce()를 활용하면 이 문제를 간결하게 해결할 수 있습니다. 코드는 다음과 같습니다.

const arr = [1, 2, 4, 1, 2, 3, 4, 3];
const alternateOperation = arr => {
    const productArr = arr.reduce((acc, val, ind) => {
        if(ind % 2 === 1){
            return acc;
        };
        acc.push(val * (arr[ind + 1] || 1));
        return acc;
    }, []);
    return productArr.reduce((acc, val) => acc + val);
};
console.log(alternateOperation(arr));

코드 설명

위 코드의 동작 원리를 단계별로 살펴보겠습니다.

첫 번째 reduce() — 곱셈 단계:

  • 배열을 순회하면서 현재 인덱스(ind)가 홀수일 경우 해당 요소는 건너뛰고 누적 배열(acc)을 그대로 반환합니다.
  • 인덱스가 짝수일 경우에는 현재 요소(val)와 바로 다음 요소(arr[ind + 1])를 곱한 값을 누적 배열에 추가합니다.
  • (arr[ind + 1] || 1) 표현식 덕분에 배열 길이가 홀수여서 마지막 요소에 짝이 없을 때도 오류 없이 자기 자신의 값(×1)이 처리됩니다.

두 번째 reduce() — 덧셈 단계:

  • 곱셈 결과들이 담긴 배열(productArr)의 모든 요소를 순회하며 전체 합계를 계산해 반환합니다.

출력 결과

콘솔에 출력되는 결과는 다음과 같습니다.

24

이처럼 reduce() 메서드를 두 단계로 나누어 활용하면, 반복문 없이도 배열의 교차 곱셈 합계를 깔끔하고 가독성 좋게 구현할 수 있습니다.