이번 글에서는 숫자를 입력받아 그 숫자를 이루는 자릿수 중 서로 다른 두 자릿수 사이의 최대 차이를 반환하는 JavaScript 함수를 작성해 보겠습니다.
좀 더 쉽게 설명하면, 숫자를 구성하는 자릿수 중 가장 큰 자릿수와 가장 작은 자릿수의 차이를 계산하여 반환하면 됩니다.
예시
입력된 숫자가 654646이라고 가정해 보겠습니다.
- 가장 작은 자릿수: 4
- 가장 큰 자릿수: 6
따라서 함수가 반환해야 하는 결과값은 6 - 4 = 2입니다.
숫자: 654646 최소 자릿수: 4 최대 자릿수: 6 출력 결과: 2
구현 방법
이 문제는 재귀(Recursion)를 활용하면 간결하게 해결할 수 있습니다. 숫자의 마지막 자릿수를 하나씩 추출하면서 지금까지 확인한 최솟값과 최댓값을 매개변수로 전달하고, 모든 자릿수를 확인한 뒤 최댓값과 최솟값의 차이를 반환하는 방식입니다.
해당 로직을 구현한 코드는 다음과 같습니다.
const num = 654646;
const maxDifference = (num, min = Infinity, max = -Infinity) => {
if(num){
// 마지막 자릿수 추출
const digit = num % 10;
// 남은 숫자와 함께 최솟값, 최댓값을 갱신하여 재귀 호출
return maxDifference(Math.floor(num / 10),
Math.min(digit, min),
Math.max(digit, max));
};
// 모든 자릿수를 확인한 후 최대 차이 반환
return max - min;
};
console.log(maxDifference(num));코드 동작 원리
num % 10을 통해 현재 숫자의 가장 마지막 자릿수를 추출합니다.Math.floor(num / 10)으로 마지막 자릿수를 제거한 나머지 숫자를 만들어 재귀적으로 함수를 다시 호출합니다.- 재귀 호출 시
Math.min()과Math.max()를 사용해 지금까지 발견한 최솟값과 최댓값을 계속 갱신합니다. num이 0이 되어 모든 자릿수를 확인하면, 누적된max와min의 차이를 최종 결과로 반환합니다.
실행 결과
위 코드를 실행하면 콘솔에 다음과 같은 결과가 출력됩니다.
2
이처럼 재귀 함수와 기본 매개변수(Default Parameter)를 활용하면 반복문 없이도 숫자의 자릿수 간 최대 차이를 깔끔하게 계산할 수 있습니다.