Computer >> 컴퓨터 >  >> 프로그래밍 >> JavaScript

JavaScript로 숫자의 최대 자릿수와 최소 자릿수 차이 구하기

이번 글에서는 하나의 숫자를 입력받아, 그 숫자를 이루는 각 자릿수 중 가장 큰 숫자가장 작은 숫자의 차이를 반환하는 JavaScript 함수를 작성해 보겠습니다.

문제 이해하기

예를 들어, 주어진 숫자가 5464676이라고 가정해 봅시다.

  • 가장 작은 자릿수: 4
  • 가장 큰 자릿수: 7

따라서 함수는 두 값의 차이인 3을 반환해야 합니다.

재귀 함수로 구현하기

이 문제는 재귀(Recursion)를 활용하면 간결하게 해결할 수 있습니다. 숫자를 10으로 나눈 나머지로 마지막 자릿수를 추출하고, 재귀 호출을 통해 남은 자릿수를 계속 탐색하면서 최솟값과 최댓값을 갱신하는 방식입니다.

const num = 44353456;
const difference = (num, min = Infinity, max = -Infinity) => {
    if(num){
        const digit = num % 10;
        return difference(Math.floor(num / 10), Math.min(digit, min),
        Math.max(digit, max));
    };
    return max - min;
};
console.log(difference(num));

코드 살펴보기

  1. 매개변수 minInfinity, max-Infinity로 초기화하여 어떤 자릿수와 비교해도 올바르게 갱신되도록 합니다.
  2. num % 10으로 현재 숫자의 마지막 자릿수를 구합니다.
  3. Math.minMath.max로 지금까지의 최솟값·최댓값을 갱신한 뒤, Math.floor(num / 10)으로 마지막 자릿수를 제거하고 재귀 호출을 이어갑니다.
  4. num이 0이 되면 모든 자릿수를 확인한 것이므로 max - min을 반환합니다.

실행 결과

콘솔에 출력되는 결과는 다음과 같습니다.

3

반복문을 활용한 대안

재귀 대신 반복문과 배열 메서드를 조합하면 더 직관적으로 표현할 수도 있습니다.

const differenceIterative = (num) => {
    const digits = String(num).split('').map(Number);
    return Math.max(...digits) - Math.min(...digits);
};
console.log(differenceIterative(44353456)); // 3

숫자를 문자열로 변환한 뒤 각 자릿수를 배열로 만들고, 전개 연산자(spread operator)와 함께 Math.max, Math.min을 사용하면 한 줄로 차이를 계산할 수 있습니다. 자릿수가 많지 않은 일반적인 경우에는 이 방식이 코드 가독성 면에서 유리합니다.