[Programmers - 자바] 가장 큰 수
https://programmers.co.kr/learn/courses/30/lessons/42746
코딩테스트 연습 - 가장 큰 수
0 또는 양의 정수가 주어졌을 때, 정수를 이어 붙여 만들 수 있는 가장 큰 수를 알아내 주세요. 예를 들어, 주어진 정수가 [6, 10, 2]라면 [6102, 6210, 1062, 1026, 2610, 2106]를 만들 수 있고, 이중 가장 큰
programmers.co.kr
참 골치아픈 정렬이다. 일단 숫자끼리 비교하기에는 너무 신경쓸게 많아서 문자열 바꿔서 compareTo 함수로 비교를 하려고 했다. 근데 다들 힘들어하듯(나만 어렵나) 3 이랑 30 이랑 34 이거 비교할때 34 > 3 > 30 이다. 매우 매우 짜증난다.
어떻게 할까 생각한게 34 랑 3 비교할때 반복을 하면 좋지 않을까 햇다. 그니깐 34 > 33 이렇게 길이가 다를 경우 길이를 맞춰주고 비교하는 거다. 그치만 구현이 딸려서 그대로 죽었다.
다음에 생각한게 어차피 합칠껀데 앞에 오는게 이득인지 뒤에오는게 이득인지 알면 되니까! 두 개를 앞 뒤로 합친거를 비교하는 획기적인 생각을 하였다. 그니까 3 + 34 = 334 랑 34 + 3 = 343 이랑 비교하는 것이다! 343 이 크므로 34 > 3 인 것이다!
코드도 (s1+s2).compareTo(s2+s1) 이렇게 하면 된다! 하하
이랫는데 예외가 한 개 더 있었다. 이거를 찾느라 아주 죽어버리는 줄 알았다. 여러모로 굉장히 짜증나는 문제다. 왜 도대체 예외를 안주는거야... 그 예외는 만약 0 0 0 0 0 들어오면 00000 이 아니고 0 을 출력해야한다... 쉣
전체 코드이다.
import java.util.*;
import java.io.*;
class Solution {
public String solution(int[] numbers) {
String answer = "";
String[] arr = new String[numbers.length];
for(int i=0; i<numbers.length; i++){
arr[i] = Integer.toString(numbers[i]);
}
Arrays.sort(arr,new Comparator<String>(){
@Override
public int compare(String a, String b){
return (b+a).compareTo(a+b);
}
});
if(arr[0].equals("0")) answer = "0";
else{
for(String s : arr){
answer += s;
}
}
return answer;
}
}