이번 글에서는 양의 정수 하나를 입력받아, 그 숫자의 자릿수를 재배열하여 만들 수 있는 가장 작은 숫자와 원래 숫자 사이의 차이를 계산하는 JavaScript 함수를 작성하는 방법을 알아보겠습니다.
문제 이해
함수는 양의 정수를 유일한 입력값으로 받으며, 해당 숫자의 자릿수를 임의로 재배열했을 때 만들어질 수 있는 최소 숫자를 찾은 뒤, 원래 숫자에서 그 값을 뺀 결과를 반환해야 합니다.
예를 들어 입력 숫자가 820이라고 가정해 보겠습니다.
- 820의 자릿수(8, 2, 0)를 오름차순으로 정렬하면 '028', 즉 28이 됩니다.
- 따라서 함수가 반환해야 하는 값은 다음과 같습니다.
820 - 28 = 792
구현 코드
const num = 820;
const maximumDifference = (num) => {
// 숫자를 문자열로 변환
const numStr = '' + num;
// 각 자릿수를 배열로 분리한 뒤 오름차순 정렬
const sorted = numStr.split('').sort();
// 정렬된 자릿수를 다시 합쳐 숫자로 변환
const smallest = +sorted.join('');
// 원래 숫자에서 최소 숫자를 뺀 값을 반환
return num - smallest;
};
console.log(maximumDifference(num));
코드 동작 원리
- 문자열 변환: 숫자에 빈 문자열을 더해(
'' + num) 문자열로 변환합니다. - 자릿수 분리 및 정렬:
split('')으로 한 글자씩 배열로 나눈 후,sort()를 사용해 오름차순으로 정렬합니다. 문자열 기본 정렬이므로 별도의 비교 함수 없이도 자릿수가 작은 순서대로 배치됩니다. - 최소 숫자 생성: 정렬된 배열을
join('')으로 다시 하나의 문자열로 합친 뒤, 단항 덧셈 연산자(+)를 통해 숫자로 변환합니다. 앞자리가 0인 경우(예: '028')에도 숫자 변환 시 자동으로 처리됩니다. - 차이 계산: 원래 숫자에서 최소 숫자를 빼면 요구되는 최대 차이가 됩니다.
출력 결과
위 코드를 실행하면 콘솔에 다음과 같은 결과가 출력됩니다.
792