문제 소개
이번 글에서는 JavaScript를 활용해 숫자의 각 자릿수 합계와 각 자릿수 곱 사이의 절댓값 차이를 계산하는 방법을 알아보겠습니다.
예를 들어 숫자 434312가 주어졌을 때, 각 자릿수는 4, 3, 4, 3, 1, 2입니다.
- 자릿수의 합: 4 + 3 + 4 + 3 + 1 + 2 = 17
- 자릿수의 곱: 4 × 3 × 4 × 3 × 1 × 2 = 288
따라서 두 값의 절댓값 차이는 |288 − 17| = 271이 됩니다.
해결 접근 방식
구현 과정은 다음과 같습니다.
- 숫자를 문자열로 변환한 뒤
split('')으로 개별 자릿수 배열로 만듭니다. reduce()메서드를 사용해 각 자릿수의 합계를 계산합니다.- 같은 방식으로 각 자릿수의 곱을 계산합니다.
- 곱에서 합계를 뺀 값에
Math.abs()를 적용해 절댓값을 반환합니다.
예제 코드
다음은 전체 구현 코드입니다.
const num = 434312;
const sumProductDifference = (num = 1) => {
// 각 자릿수의 합계 계산
const sum = String(num)
.split('')
.reduce((acc, val) => acc + +val, 0);
// 각 자릿수의 곱 계산
const product = String(num)
.split('')
.reduce((acc, val) => acc * +val, 1);
// 곱과 합계의 절댓값 차이 반환
const diff = product - sum;
return Math.abs(diff);
};
console.log(sumProductDifference(num));실행 결과
271
코드 설명
String(num)으로 숫자를 문자열로 변환하면, split('')을 통해 한 글자씩 분리된 배열을 얻을 수 있습니다. 이때 reduce 콜백 안에서 단항 연산자 +val을 사용해 문자열을 다시 숫자로 변환합니다.
합계를 구할 때는 초기값을 0으로, 곱을 구할 때는 초기값을 1로 설정하는 점에 유의하세요. 곱의 초기값을 0으로 설정하면 모든 결과가 0이 되어버립니다.
마지막으로 Math.abs()를 사용해 결과가 항상 양수가 되도록 처리합니다. 이는 어떤 순서로 두 값을 빼더라도 동일한 결과를 보장하기 위함입니다.