프로그래머스 42746번
https://school.programmers.co.kr/learn/courses/30/lessons/42746
✔️ 정렬 문제이다.
⭐ 길이가 너무 길어질 수 있으니, 문자열로 바꾸어 return한다는게 어떻게 보면 힌트이다.
⭐ 문자열로 만들어서 앞뒤로 합친 후 사전 순으로 비교하고 내림차순으로 정렬하면 가장 큰 값을 만들 수 있다.
Arrays.sort(arr, new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
return (o2 + o1).compareTo(o1 + o2);
}
});
PriorityQueue로도 궁금해서 해봤는데, 시간이 더 오래걸린다. 아무래도 삽입이나 정렬하면서 들어가고 빼는 과정에서 발생하는 시간 때문인 것 같다.
import java.util.*;
class Solution {
// https://school.programmers.co.kr/learn/courses/30/lessons/42746
public String solution(int[] numbers) {
int n = numbers.length;
String[] arr = new String[n];
for(int i=0; i<n; i++) {
arr[i] = String.valueOf(numbers[i]);
}
Arrays.sort(arr, new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
return (o2 + o1).compareTo(o1 + o2);
}
});
if(arr[0].equals("0")) {
return "0";
}
StringBuilder sb = new StringBuilder();
for(int i=0; i<n; i++) {
sb.append(arr[i]);
}
return sb.toString();
} // End of solution()
} // End of Solution class