[알고리즘] 프로그래머스 #42746 정렬 - 가장 큰 수

고서영·2025년 3월 13일
post-thumbnail

✏️ 문제

https://school.programmers.co.kr/learn/courses/30/lessons/42746#

function solution(numbers) {
    var answer = '';
    numbers.sort((a, b) => b - a);
    numbers.sort((a, b) => String(a)[b.length-1] - String(b)[a.length-1]);
    return answer;
}

// [9, 5, 34, 30, 3]

여기서 3이 30보다 앞에 오게 해야하는 알고리즘이 아무리 생각해도 생각나지 않았다.

📍 다른 사람의 풀이

다른 풀이를 읽어보니 수를 직접 비교하면서 풀었다. 예를 들어, '3'+'30' 과 '30+3' 이 어느 쪽이 더 큰지 비교해서 정렬한 것이다.

function solution(numbers) {
    var answer = '';
    numbers_ = numbers.map(String);
    numbers_.sort((a, b) => (b+a) - (a+b))
    
    answer = numbers_.join('');
    
    return answer;
}

이 풀이를 보고 코드를 작성했고, 테스트 케이스 1개를 통과하지 못했다. 만약 모든 수가 0으로 구성되어 있다면 '000' 이 아닌 '0'으로 출력되어야 한다.

📍 최종 코드

function solution(numbers) {
    var answer = '';
    numbers_ = numbers.map(String);
    numbers_.sort((a, b) => (b+a) - (a+b))
    
    if (numbers_[0] === '0') {
        return '0';
    }
    
    answer = numbers_.join('');
    
    return answer;
}

❓ 알게 된 것

  • join 메서드는 javascript에도 적용된다. 반복문보단 join을 사용해보자
    answer = numbers_.join('');
  • 직접 구현하는 것을 먼저 생각하기
profile
흘러가는 대로 삽니다.

0개의 댓글