숫자의 자릿수를 거꾸로 뒤집은 값을 반환하는 Number.prototype.reverse() 함수를 작성해 보겠습니다. 이 문제는 숫자를 배열로 변환하거나 문자열 메서드를 사용하지 않고, 오직 수학적 연산만으로 해결하는 것이 핵심입니다.
동작 예시
234.reverse() = 432; 6564.reverse() = 4656;
이 기능은 재귀(recursion) 방식으로 깔끔하게 구현할 수 있습니다. 매 단계마다 숫자를 10으로 나눈 몫과 나머지를 이용해 마지막 자릿수를 하나씩 분리하고, 이를 결과값에 누적하는 원리입니다. 음수 여부는 별도의 플래그로 전달하여 최종 결과에 부호를 반영합니다.
구현 코드
const reverse = function(temp = Math.abs(this), reversed = 0, isNegative = this < 0){
if(temp){
return reverse(Math.floor(temp/10), (reversed*10)+temp%10, isNegative);
};
return !isNegative ? reversed : reversed*-1;
};
Number.prototype.reverse = reverse;
const n = -12763;
const num = 43435;
console.log(num.reverse());
console.log(n.reverse());코드 설명
- temp — 아직 처리하지 않은 남은 자릿수를 나타내며, 기본값은 숫자의 절댓값입니다.
- reversed — 지금까지 누적된 반전 결과값입니다. 매번 10을 곱한 뒤 새 자릿수를 더하는 방식으로 자릿수가 이어집니다.
- isNegative — 원래 숫자가 음수였는지 저장하는 플래그로, 재귀가 끝난 후 결과에 음수 부호를 붙이는 데 사용됩니다.
재귀 호출은 temp가 0이 되는 시점, 즉 모든 자릿수를 처리했을 때 종료되며, 그 시점의 reversed 값이 최종 결과가 됩니다.
실행 결과
위 코드를 실행하면 콘솔에 다음과 같이 출력됩니다.
53434 -36721