이번 글에서는 하나의 숫자를 입력받아 그 숫자를 이루는 모든 자릿수의 곱을 계산하는 JavaScript 함수를 만들어 보겠습니다.
여기서 중요한 규칙은 하나 있습니다. 숫자에 0이 포함되어 있다면, 해당 자릿수는 곱셈 시 1로 취급해야 한다는 점입니다.
문제 이해하기
예를 들어 입력값이 다음과 같다고 가정해 봅시다.
5720
이 숫자의 자릿수는 5, 7, 2, 0 입니다. 마지막 자릿수인 0은 규칙에 따라 1로 대체되어 곱해지므로, 계산 결과는 다음과 같습니다.
5 × 7 × 2 × 1 = 70
따라서 기대하는 출력값은 70입니다.
재귀 함수로 해결하기
이 문제는 재귀(Recursion)를 활용하면 매우 깔끔하게 해결할 수 있습니다. 숫자를 10으로 나눈 몫과 나머지를 반복적으로 활용하여 마지막 자릿수부터 차례대로 곱해 나가는 방식입니다.
예제 코드
const num = 5720;
const recursiveProduct = (num, res = 1) => {
if(num){
return recursiveProduct(Math.floor(num / 10), res * (num % 10 || 1));
}
return res;
};
console.log(recursiveProduct(num));코드 동작 원리
- res = 1: 결과값을 누적할 변수로, 초기값은 곱셈의 항등원인 1입니다.
- num % 10: 현재 숫자의 마지막 자릿수를 추출합니다.
- (num % 10 || 1): 마지막 자릿수가 0일 경우 falsy 값으로 평가되므로, 논리 OR 연산자(
||)를 통해 자동으로 1로 대체됩니다. - Math.floor(num / 10): 마지막 자릿수를 제거한 나머지 부분을 재귀 호출에 전달합니다.
- 숫자가 0이 되면 재귀가 종료되고, 지금까지 누적된 곱셈 결과가 반환됩니다.
실행 결과
위 코드를 콘솔에서 실행하면 다음과 같은 출력을 확인할 수 있습니다.
70
마무리
이처럼 재귀 함수와 논리 OR 연산자를 조합하면, 0이 포함된 숫자도 손쉽게 처리하면서 각 자릿수의 곱을 구할 수 있습니다. 코드가 짧고 직관적이라 실무에서도 유용하게 활용할 수 있는 패턴입니다.