문제 소개
이번 글에서는 세 자리 양의 정수 하나를 입력받아, 그 숫자의 자릿수들을 재배열하여 만들 수 있는 가장 큰 수를 반환하는 JavaScript 함수를 작성해 보겠습니다.
예를 들어 149가 입력되면, 자릿수 1, 4, 9 중에서 가장 큰 조합인 941을 결과로 반환해야 합니다.
해결 아이디어
핵심 로직은 간단합니다. 숫자를 문자열로 변환한 뒤 각 자릿수를 배열 요소로 분리하고, 내림차순으로 정렬한 후 다시 하나의 숫자로 합치면 됩니다. 또한 입력값이 실제로 세 자리 수(100~999)인지 검증하여, 그렇지 않으면 null을 반환하도록 처리합니다.
코드 구현
const num = 149;
const maxRedigit = function(num) {
// 세 자리 수가 아니면 null 반환
if(num < 100 || num > 999)
return null;
return +num
.toString() // 숫자 → 문자열 변환
.split('') // 한 글자씩 배열로 분리
.sort((a, b) => b - a) // 내림차순 정렬
.join(''); // 다시 하나의 문자열로 결합
};
console.log(maxRedigit(num));실행 결과
941
코드 동작 원리 상세 설명
각 단계가 어떻게 동작하는지 살펴보겠습니다.
1. 유효성 검사
if(num < 100 || num > 999) 조건을 통해 입력값이 100 미만이거나 999 초과일 경우 null을 반환합니다. 이렇게 하면 두 자리 수나 네 자리 수처럼 잘못된 입력을 사전에 걸러낼 수 있습니다.
2. 문자열 변환과 분리
toString()은 숫자를 문자열로 바꾸고, split('')은 빈 문자열을 기준으로 각 자릿수를 개별 요소로 나눕니다. 예를 들어 149는 ['1', '4', '9'] 배열이 됩니다.
3. 내림차순 정렬
sort((a, b) => b - a)는 비교 함수를 사용해 큰 값부터 작은 값 순서로 정렬합니다. 결과적으로 ['9', '4', '1']이 됩니다.
4. 결합과 숫자 변환
join('')으로 배열을 '941'이라는 문자열로 합친 뒤, 맨 앞의 단항 더하기 연산자(+)가 이를 다시 숫자 941로 변환합니다.
마무리
이처럼 JavaScript의 내장 메서드 체이닝만 활용하면 별도의 반복문 없이도 짧고 깔끔하게 문제를 해결할 수 있습니다. 자릿수 조합 문제는 코딩 테스트에서 자주 등장하는 유형이므로, 위 패턴을 익혀두면 다양한 변형 문제에도 응용할 수 있습니다.