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

JavaScript로 숫자의 자릿수를 재배열해 최댓값 만들기

문제 개요

하나의 숫자 n을 입력받아, 해당 숫자의 자릿수들을 재배열하여 만들 수 있는 최댓값을 반환하는 JavaScript 함수를 작성하는 것이 과제입니다.

예를 들어 입력이 124라면, 자릿수 1, 2, 4 중 가장 큰 숫자부터 내림차순으로 배치하여 421을 반환해야 합니다.

접근 방법

자릿수를 재배열해 가장 큰 수를 만들려면 다음과 같은 논리가 성립합니다.

  • 큰 자릿수(백의 자리, 십의 자리 등)에 올수록 더 큰 숫자를 배치해야 전체 값이 커집니다.
  • 따라서 숫자를 문자열로 변환한 뒤 각 자릿수로 분리하고, 이를 내림차순으로 정렬한 후 다시 하나로 합치면 됩니다.

예제 코드

다음은 위 로직을 구현한 코드입니다.

const num = 124;

const rotateToMax = n => {
   // 숫자를 문자열로 변환한 뒤 각 자릿수를 숫자 배열로 분리
   n = n
      .toString()
      .split('')
      .map(el => +el);

   // 자릿수를 내림차순으로 정렬
   n.sort((a, b) => b - a);

   // 배열을 다시 문자열로 합쳐서 반환
   return n.join('');
};

console.log(rotateToMax(num));

출력 결과

421

코드 동작 원리

이 코드는 다음 단계로 동작합니다.

  1. toString(): 숫자 124를 문자열 "124"로 변환합니다.
  2. split(''): 문자열을 한 글자씩 잘라 ['1', '2', '4'] 배열을 만듭니다.
  3. map(el => +el): 각 문자 요소를 숫자로 변환하여 [1, 2, 4]로 만듭니다.
  4. sort((a, b) => b - a): 비교 함수를 사용해 배열을 내림차순으로 정렬합니다. 결과는 [4, 2, 1]입니다.
  5. join(''): 정렬된 배열을 다시 문자열 "421"로 합쳐 반환합니다.

참고 사항

만약 결과를 숫자 타입으로 받고 싶다면 반환 시 +n.join('')처럼 단항 덧셈 연산자를 사용해 형변환할 수 있습니다. 또한 음수나 0이 포함된 경우에는 별도의 처리 로직이 필요할 수 있으므로, 실무에서는 입력 값의 범위를 먼저 확인하는 것이 좋습니다.