문제 개요
숫자 배열을 첫 번째이자 유일한 인수로 받는 JavaScript 함수를 작성해야 합니다. 이 함수는 배열에 포함된 숫자들을 서로 이어 붙여, 주어진 숫자들로 만들 수 있는 가장 큰 수를 문자열 형태로 반환해야 합니다.
예를 들어 입력 배열이 다음과 같다면,
const arr = [5, 45, 34, 9, 3];
출력 결과는 다음과 같아야 합니다.
const output = '9545343';
접근 방법
이 문제의 핵심은 단순히 숫자의 크기 순으로 정렬하는 것이 아니라, 두 숫자를 이어 붙였을 때 더 큰 값이 되는 순서를 기준으로 정렬하는 것입니다. 예를 들어 5와 45를 비교할 때, '545'와 '455' 중 어느 쪽이 더 큰지 비교하여 정렬 순서를 결정합니다.
또한 배열의 모든 요소가 0인 경우(예: [0, 0])에는 '00'이 아닌 '0'을 반환하도록 별도의 예외 처리가 필요합니다.
예제 코드
const arr = [5, 45, 34, 9, 3];
const largestNumber = (arr = []) => {
if(arr.every( n => n === 0)){
return '0';
}
arr.sort((a, b) => {
const s1 = new String(a);
const s2 = new String(b);
const first = s1 + s2;
const second = s2 + s1;
if(first > second){
return -1;
}else if(first < second){
return 1;
};
return 0;
});
return arr.join('');
};
console.log(largestNumber(arr));코드 설명
- 모두 0인 경우 처리:
arr.every(n => n === 0)으로 배열의 모든 요소가 0인지 확인하고, 해당되면 '0'을 즉시 반환합니다. - 커스텀 정렬:
sort()의 비교 함수에서 두 숫자를 각각 앞뒤로 이어 붙인 문자열(s1+s2, s2+s1)을 비교하여, 더 큰 조합이 만들어지는 숫자가 앞에 오도록 정렬합니다. - 결합 및 반환: 정렬이 완료된 배열을
join('')으로 하나의 문자열로 합쳐 최종 결과를 반환합니다.
출력 결과
코드를 실행하면 콘솔에 다음과 같은 결과가 출력됩니다.
9545343