숫자 배열을 인수로 받아, 배열에 포함된 모든 숫자의 합(sum)과 곱(product)을 각각 계산한 뒤, 두 값의 절대적인 차이를 반환하는 JavaScript 함수를 작성해야 합니다.
문제 접근 방식
이 문제는 배열의 reduce() 메서드를 활용하면 깔끔하게 해결할 수 있습니다. 반복 과정에서 누적 객체에 sum과 product 두 값을 함께 유지하면서 각 요소를 처리합니다.
- sum의 초기값은 0으로 설정합니다. 덧셈의 항등원이기 때문입니다.
- product의 초기값은 1로 설정합니다. 곱셈의 항등원이기 때문입니다.
모든 요소를 순회한 후에는 Math.abs()를 사용해 합과 곱의 차이를 절댓값으로 반환합니다.
예제 코드
다음은 전체 구현 코드입니다.
const arr = [1, 4, 1, 2, 1, 6, 3];
const sumProductDifference = (arr = []) => {
const creds = arr.reduce((acc, val) => {
let { sum, product } = acc;
sum += val;
product *= val;
return { sum, product };
}, {
sum: 0,
product: 1
});
const { sum, product } = creds;
return Math.abs(sum - product);
};
console.log(sumProductDifference(arr));
실행 결과
콘솔에 출력되는 결과는 다음과 같습니다.
126
결과 검증
배열 [1, 4, 1, 2, 1, 6, 3]을 기준으로 직접 계산해 보면:
- 합계: 1 + 4 + 1 + 2 + 1 + 6 + 3 = 18
- 곱: 1 × 4 × 1 × 2 × 1 × 6 × 3 = 144
따라서 절대 차이는 |18 − 144| = 126이 되어, 코드의 출력 결과와 일치함을 확인할 수 있습니다.