숫자가 주어졌을 때, 예를 들어 123이 입력되면 다음과 같은 배열을 반환하는 함수를 작성해야 합니다.
[100, 20, 3]
즉, 이 함수는 인자로 전달된 숫자를 구성하는 각 자릿수의 자릿값(place value)을 요소로 가지는 배열을 반환하는 것이 핵심입니다. 123은 백의 자리 1(=100), 십의 자리 2(=20), 일의 자리 3(=3)으로 분해될 수 있습니다.
이 문제는 재귀(recursion) 방식을 활용하면 깔끔하게 해결할 수 있습니다. 숫자의 마지막 자릿수를 추출하고, 남은 숫자에 대해 같은 작업을 반복하는 구조입니다.
구현 코드
다음은 재귀 함수를 이용한 해결 코드입니다.
const num = 123;
const placeValue = (num, res = [], factor = 1) => {
if(num){
const val = (num % 10) * factor;
res.unshift(val);
return placeValue(Math.floor(num / 10), res, factor * 10);
 };
return res;
};
console.log(placeValue(num));코드 동작 원리
num % 10: 현재 숫자의 마지막 자릿수를 추출합니다.factor: 현재 자릿값의 배율(1, 10, 100...)을 나타내며, 재귀 호출마다 10배씩 증가합니다.res.unshift(val): 계산된 자릿값을 배열의 맨 앞에 삽입하여 최종적으로 왼쪽부터 큰 자릿수 순서가 되도록 합니다.Math.floor(num / 10): 마지막 자릿수를 제거한 나머지 숫자로 재귀 호출을 진행합니다.num이 0이 되면 재귀가 종료되고 결과 배열을 반환합니다.
실행 결과
위 코드를 실행하면 콘솔에 다음과 같은 출력이 나타납니다.
[ 100, 20, 3 ]
이처럼 간단한 재귀 로직만으로 임의의 정수를 자릿값 단위의 배열로 손쉽게 변환할 수 있습니다. 음수나 소수점 처리 등 추가 요구사항이 있다면 입력 검증 로직을 함께 고려하면 좋습니다.