[프로그래머스] 가장 큰 수 JavaScript

·2024년 7월 29일

문제

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

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

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

예제 입력

numbers : [3, 30, 34, 5, 9]

예제 출력

"9534330"

제한 사항

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

내가 했던 풀이 방법

해당 내용은 풀이 방법이 단순하므로, 왜 그렇게 나오는지에 대해 설명한다.

("3", "30"): "330" vs "303", "330"이 더 크므로 "3"이 "30"보다 앞에 옴
("3", "34"): "334" vs "343", "343"이 더 크므로 "34"가 "3"보다 앞에 옴
("3", "5"): "35" vs "53", "53"이 더 크므로 "5"가 "3"보다 앞에 옴
("3", "9"): "39" vs "93", "93"이 더 크므로 "9"가 "3"보다 앞에 옴
("30", "34"): "3034" vs "3430", "3430"이 더 크므로 "34"가 "30"보다 앞에 옴
("30", "5"): "305" vs "530", "530"이 더 크므로 "5"가 "30"보다 앞에 옴
("30", "9"): "309" vs "930", "930"이 더 크므로 "9"가 "30"보다 앞에 옴
("34", "5"): "345" vs "534", "534"이 더 크므로 "5"가 "34"보다 앞에 옴
("34", "9"): "349" vs "934", "934"이 더 크므로 "9"가 "34"보다 앞에 옴
("5", "9"): "59" vs "95", "95"이 더 크므로 "9"가 "5"보다 앞에 옴

그 결과 ["9", "5", "34", "3", "30"] 순으로 정렬되게 된다.
=> "9534330" 정답과 일치한다.

0으로만 찬 경우를 제외하기 위해 맨 앞 값이 0일 경우, 0으로 return 한다.

코드

function solution(numbers) {
    numbers = numbers.map(String);

    numbers.sort((a, b) => (b + a) - (a + b));
    
    let answer = numbers.join('');
    
    if (answer[0] === '0') {
        return '0';
    }
    
    return answer;
}

회고

이 문제도 DFS로 접근했다가 런타임 에러나고 갈아엎었다........ 이런 생각을 문제를 보고 바로 떠오를 수 있는 때가 나도... 오겠지...?

profile
Frontend🍓

0개의 댓글