이번 문제의 요구 사항은 간단합니다. 숫자를 입력받아 그 숫자가 몇 자리인지 반환하는 자바스크립트 함수를 작성하는 것입니다.
문제 이해하기
예를 들어 다음과 같은 결과가 나와야 합니다.
4567의 자릿수는 4
423467의 자릿수는 6
457의 자릿수는 3
재귀 함수로 해결하기
가장 우아한 방법 중 하나는 재귀(Recursion)를 활용하는 것입니다. 숫자를 10으로 나눈 몫을 다시 함수에 전달하고, 호출될 때마다 카운트를 1씩 증가시키면 됩니다. 숫자가 0이 되면 지금까지 쌓인 카운트가 곧 자릿수입니다.
코드 예제
const num = 2353454;
const digits = (num, count = 0) => {
if(num){
return digits(Math.floor(num / 10), ++count);
};
return count;
};
console.log(digits(num));
console.log(digits(123456));
console.log(digits(53453));
console.log(digits(5334534534));
실행 결과
콘솔에 출력되는 결과는 다음과 같습니다.
7
6
5
10
동작 원리 살펴보기
이 코드가 작동하는 과정을 단계별로 살펴보겠습니다.
1단계: digits(2353454)가 호출되면, Math.floor(2353454 / 10) 즉 235345와 카운트 1을 인자로 재귀 호출합니다.
2단계: 이 과정은 숫자가 0이 될 때까지 반복됩니다. 매번 마지막 자릿수가 잘려나가고 카운트가 하나씩 늘어납니다.
3단계: 숫자가 0이 되면 조건문 if(num)이 거짓이 되어 재귀가 종료되고, 누적된 카운트 값이 최종적으로 반환됩니다.
다른 접근 방법: 문자열 변환 활용
재귀 대신 숫자를 문자열로 변환하여 길이를 구하는 더 간결한 방법도 있습니다.
const digits = (num) => String(Math.abs(num)).length;
console.log(digits(2353454)); // 7
console.log(digits(-457)); // 3
Math.abs()를 사용하면 음수에서 마이너스 기호가 포함되는 문제를 방지할 수 있습니다. 다만 재귀 방식은 수학적 논리를 명확히 보여준다는 장점이 있어, 알고리즘 학습 목적에는 더 적합합니다.