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

JavaScript로 배열 요소의 교차 곱셈 합계 계산하기

문제 이해하기

숫자 배열을 입력받아 인접한 두 요소씩 곱한 값을 차례대로 더하는 JavaScript 함수를 작성해야 합니다. 즉, 배열의 요소들을 두 개씩 묶어 곱셈을 수행한 뒤, 그 결과값들을 모두 합산하는 방식입니다.

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

const arr = [1, 2, 3, 4, 5, 6, 7];

이 경우 결과값은 아래와 같은 방식으로 계산됩니다.

1*2 + 3*4 + 5*6 + 7
= 2 + 12 + 30 + 7

따라서 최종 출력값은 다음과 같습니다.

51

배열의 길이가 홀수일 때는 마지막 요소에 짝이 없으므로 해당 요소가 그대로 더해진다는 점에 유의하세요. 위 예제에서는 마지막 요소인 7이 단독으로 합산됩니다.

구현 방법

이 문제는 Array.prototype.reduce() 메서드를 활용하면 깔끔하게 해결할 수 있습니다. 크게 두 단계로 나누어 처리합니다.

첫 번째 단계에서는 짝수 인덱스의 요소와 바로 다음 요소를 곱한 값들을 새로운 배열에 담고, 두 번째 단계에서는 해당 배열의 모든 값을 합산하여 최종 결과를 반환합니다.

예제 코드

const arr = [1, 2, 3, 4, 5, 6, 7];
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 % 2 === 1)의 요소는 건너뛰고 짝수 인덱스의 요소만 처리합니다. 각 짝수 인덱스에서 현재 요소와 바로 다음 요소를 곱한 값을 누적 배열(acc)에 추가합니다.

여기서 arr[ind + 1] || 1 표현식이 중요한 역할을 합니다. 배열의 길이가 홀수여서 다음 요소가 존재하지 않으면(undefined) 1을 곱하게 되어, 마지막 요소가 값 그대로 유지된 채 합산에 포함됩니다.

마지막으로 두 번째 reduce는 곱셈 결과들이 담긴 배열의 모든 요소를 더해 최종 결과를 반환합니다.

출력 결과

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

51