import java.util.Arrays;
import java.util.Comparator;

class Solution {
    public String solution(int[] numbers) {
        String answer = "";
        String[] temp = new String[numbers.length];
        
        for(int i=0; i< numbers.length; i++){
            temp[i] = Integer.toString(numbers[i]);
        }
        
        //temp 내림차순으로 정렬.
        Arrays.sort(temp, new Comparator<String>(){
            @Override
            public int compare(String s1 , String s2){
                return (s2 + s1).compareTo(s1 + s2);
            }
        });
                 
        if(temp[0].equals("0")) //ex) 0000인 경우! 이런 경우 0으로 종료!
           return "0";
        
        for(int i=0; i< temp.length; i++){
            answer+=temp[i];
        }
        return answer;
    }
}

 

* compareTo

- 맨 첫자리부터 차례대로 비교하는 메소드이다!

- 차이의 길이를 리턴하게 되는데,

예를 들어, abc와 abcddd를 compareTo 하게 되면 -3을 리턴!

 

테스트 케이스에 3 이랑 30 이 input으로 있는데

330 이 되어야 하는데 303이 되어서 이걸 우쩌나 싶었다 ;-;

이런 경우 때문에

문자열 두 개를 붙여서 비교해준다. !

예를 들어 330이랑 303이랑 비교해서 더 큰 거 리턴 ~

내림차순이라서 (s2+s1).compareTo(s1+s2); 가 된다.

오름차순이라면 (s1+s2).compareTo(s2+s1) 하면 되겠쥬~? -> 이렇게 하면,, 가장 작은 수 ,, 겠지?!?

 

 

 

 

'NOTE > 프로그래머스' 카테고리의 다른 글

Level2 - 다음 큰 숫자  (0) 2022.03.14
Level2 - 문자열 압축  (0) 2022.03.14
22.01.08 - (2)  (0) 2022.01.08
22.01.08  (0) 2022.01.08
21.09.21  (0) 2021.09.21

+ Recent posts