이번 글에서는 숫자를 인자로 하나 받아서, 그 숫자를 뒤집은 값과 원래 숫자 사이의 차이(절댓값)를 계산하는 JavaScript 함수를 작성해 보겠습니다.
문제 정의
함수는 다음과 같이 동작해야 합니다.
- 인자로 받은 숫자의 자릿수를 뒤집은 값을 계산합니다.
- 원래 숫자와 뒤집은 숫자 사이의 차이를 절댓값으로 반환합니다.
예시
입력 숫자가 다음과 같다고 가정해 봅시다.
const num = 45467;
이 숫자를 뒤집으면 76454가 됩니다.
따라서 함수의 출력 결과는 다음과 같습니다.
76454 - 45467 = 30987
재귀를 활용한 해결 방법
숫자를 뒤집는 가장 간결한 방법 중 하나는 재귀(recursion)를 활용하는 것입니다. 숫자를 10으로 나눈 나머지로 마지막 자릿수를 추출하고, 결과 값에 10을 곱한 뒤 더하는 방식으로 자릿수를 하나씩 옮겨 담습니다.
const num = 45467;
// 숫자를 뒤집는 재귀 함수
const findReversed = (num, res = 0) => {
if (num) {
// 마지막 자릿수를 추출해 결과 값에 이어 붙임
return findReversed(Math.floor(num / 10), (res * 10) + (num % 10));
}
return res;
};
// 원래 숫자와 뒤집은 숫자의 차이를 계산하는 함수
const findDifference = num => {
const reversed = findReversed(num);
const difference = Math.abs(num - reversed);
return difference;
};
console.log(findDifference(num));동작 원리 살펴보기
findReversed 함수는 다음 단계로 진행됩니다.
num % 10: 현재 숫자의 마지막 자릿수를 구합니다.res * 10 + (num % 10): 기존 결과를 한 자릿수 밀고 새 자릿수를 추가합니다.Math.floor(num / 10): 처리한 마지막 자릿수를 제거하고 재귀 호출을 계속합니다.num이 0이 되면 누적된res, 즉 뒤집힌 숫자를 반환합니다.
마지막으로 findDifference 함수는 Math.abs()를 사용해 두 숫자의 차이를 항상 양수로 반환하므로, 어떤 순서로 비교하더라도 올바른 절댓값 차이를 얻을 수 있습니다.
출력 결과
콘솔에 출력되는 결과는 다음과 같습니다.
30987