import java.util.*;
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] = String.valueOf(numbers[i]);
}
//numbers 배열의 숫자를 비교해서 내림차순 정렬
//오름차순 일 경우 (o1 + o2).compareTo(o2 + o1))
Arrays.sort(arr, (o1, o2) -> (o2 + o1).compareTo(o1 + o2));
//가장 큰 수가 0일 경우, 0보다 큰 수는 없으므로 0 반환
if(arr[0].equals("0")){
return "0";
}
for(String number : arr){
answer += number;
}
return answer;
}
}
💡문자열로 바꾸어 return 해야 한다.
Comparator
를 사용해서 2개의 문자열을 붙인 후 크기를 비교하여 내림차순 정렬한다.
[3, 30, 34, 5, 9]
의 경우,"303".compareTo("330")
이 되는데
330 (o1+o2)
보다303 (o2+o1)
이 더 작기 때문에 내림차순 정렬로
해당 배열의 순서는[30, 3, 34, 5, 9]
이 된다.
이런 식으로 값을 계속 비교해주다보면 마지막에는[9, 5, 34, 3, 30]
순서로 정렬이 된다.
0
일 경우, 0
보다 큰 숫자는 없기 때문에 0
을 반환해준다.//해당 코드는 아래의 코드를 람다식으로 작성한 코드이다.
Arrays.sort(arr, (o1, o2) -> (o2 + o1).compareTo(o1 + o2));
👇
Arrays.sort( new Comparator<String> () {
public int compare(String o1, String o2){
return (o2+o1).compareTo(o1+o2);
}
});
이런식으로도 작성이 가능하다.
Comparator<String> comp = new Comparator<String>() {
public int compare(String o1, String o2){
return (o2+o1).compareTo(o1+o2);
}
});
Arrays.sort(arr, comp);
해당 숫자 크기 만큼 1의 자리, 10의 자리 등 수를 곱해서 비교를 하려 했더니
너무 복잡해질 것 같아서 풀이방법에 대해 고민을 많이 하다 결국 구글링의 도움을 받음 ㅜㅜ
정보 감사합니다.