프로그래머스 가장 큰 수

Judo·2021년 5월 2일
0

문제


0 또는 양의 정수가 주어졌을 때, 정수를 이어 붙여 만들 수 있는 가장 큰 수를 알아내 주세요.

예를 들어, 주어진 정수가 [6, 10, 2]라면 [6102, 6210, 1062, 1026, 2610, 2106]를 만들 수 있고, 이중 가장 큰 수는 6210입니다.

0 또는 양의 정수가 담긴 배열 numbers가 매개변수로 주어질 때, 순서를 재배치하여 만들 수 있는 가장 큰 수를 문자열로 바꾸어 return 하도록 solution 함수를 작성해주세요.

제한 사항


numbers의 길이는 1 이상 100,000 이하입니다.
numbers의 원소는 0 이상 1,000 이하입니다.
정답이 너무 클 수 있으니 문자열로 바꾸어 return 합니다.

풀이


function solution(numbers) {

    let newNumbers = numbers.map(number => String(number)); // 배열 요소를 문자열로 변환
    let maxSortedNumbers = newNumbers.sort((a, b) => (b + a) - (a + b));
    let answer = maxSortedNumbers.join('');  
    // (b + a) 와 (a + b)를 비교한 뒤 더 큰 수가 오도록 a, b를 정렬한다.

    // 인자로 들어온 numbers가 [0, 0, 0, 0]인 경우 0으로 바꿔줘야한다.
    if (answer[0] === '0') { 
        return '0'; 
    } else {
        return answer;
    }
}

풀이의 핵심은 newNumbers.sort((a, b) => (b + a) - (a + b));
1. 문자열로 변환한 newNumbers의 요소를 정렬
2. 문자열로 변환된 요소들을 앞뒤로 더해보고 문자열의 대소 비교
3. 더 큰 수를 만들어내는 순서로 요소를 정렬
예) ['6', '10'] 이라면 '610' 과 '106'을 비교 후 내림차순 정렬

profile
즐거운 코딩

0개의 댓글