문제 이해하기
숫자 배열을 입력받아, 인접한 두 요소씩 짝지어 곱한 뒤 그 곱들을 모두 더한 값을 반환하는 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() 메서드를 두 단계로 나누어 활용하면, 반복문 없이도 배열의 교차 곱셈 합계를 깔끔하고 가독성 좋게 구현할 수 있습니다.