프로그래머스-가장 큰 수[자바]

워니·2024년 6월 1일

문제

이 문제는 compare메서드를 오버라이딩할 수 있느냐를 묻는 문제였다
입출력 예 [3, 30, 34, 5, 9] -->"9534330" 에서
3이 30보다 먼저 정렬되야 하는데, 이건 String[]배열의 기본 sort메서드로는 할 수 없는 정렬이었기 때문이었다
그래서, compare메서드를 오버라이딩해서 "330"이 "303"보다 크다는 것을 기준으로 줘야 한다
--> return (b+a).compare(a+b);
큰 수부터 정렬하기 때문에 b가 a보다 먼저 나왔다.

그래서, 답은 여기에.

import java.util.*;

class Solution {
    public String solution(int[] numbers) {
        
        String[] strNumbers = new String[numbers.length];
        for(int i = 0; i < numbers.length; i++) {
            strNumbers[i] = String.valueOf(numbers[i]);
        }
        
        Arrays.sort(strNumbers, new Comparator<String>() {
           @Override
            public int compare(String a, String b) {
                return (b + a).compareTo(a + b);
            }
        });
        
        if (strNumbers[0].equals("0")) {
            return "0";
        }
        
        StringBuilder answer = new StringBuilder();
        for (String num : strNumbers) {
            answer.append(num);
        }
        return answer.toString();
        
    }
    
}
profile
매일, 조금씩 나아가는중

0개의 댓글