문제 개요
하나의 숫자 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
코드 동작 원리
이 코드는 다음 단계로 동작합니다.
- toString(): 숫자
124를 문자열"124"로 변환합니다. - split(''): 문자열을 한 글자씩 잘라
['1', '2', '4']배열을 만듭니다. - map(el => +el): 각 문자 요소를 숫자로 변환하여
[1, 2, 4]로 만듭니다. - sort((a, b) => b - a): 비교 함수를 사용해 배열을 내림차순으로 정렬합니다. 결과는
[4, 2, 1]입니다. - join(''): 정렬된 배열을 다시 문자열
"421"로 합쳐 반환합니다.
참고 사항
만약 결과를 숫자 타입으로 받고 싶다면 반환 시 +n.join('')처럼 단항 덧셈 연산자를 사용해 형변환할 수 있습니다. 또한 음수나 0이 포함된 경우에는 별도의 처리 로직이 필요할 수 있으므로, 실무에서는 입력 값의 범위를 먼저 확인하는 것이 좋습니다.