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

JavaScript 배열의 숫자를 조합해 가장 큰 수 만들기

문제 개요

숫자 배열을 첫 번째이자 유일한 인수로 받는 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