해당 문제는 여기에서 확인하실 수 있습니다.
이 문제는 주어진 정수 배열을 재배치하여 가장 큰 수를 만드는 문제입니다. 접근 방법은 간단한 정렬 문제로 볼 수 있지만, 정렬 기준을 어떻게 설정하느냐가 핵심입니다. 일반적인 숫자 정렬 방식으로는 원하는 결과를 얻기 어렵기 때문에, 각 숫자를 문자열로 변환하여 특정한 규칙에 따라 정렬하는 방법을 사용해야 합니다.
먼저, 주어진 정수 배열의 각 요소를 문자열로 변환합니다. 문자열로 변환한 후에는 각 문자열을 조합하여 가장 큰 수를 만들 수 있는 순서를 찾아야 합니다. 두 문자열이 있을 때, 이들을 결합하여 두 가지 가능한 조합을 만들 수 있습니다. 예를 들어, 문자열 "9"와 "34"가 있을 때, "934"와 "349"를 비교하여 더 큰 값을 선택합니다. 이 비교 과정을 모든 문자열에 대해 수행하여 내림차순으로 정렬합니다.
정렬된 결과를 하나의 문자열로 결합하여 최종 결과를 만듭니다. 이때, 결합된 문자열의 첫 번째 문자가 '0'인 경우, 이는 모든 숫자가 0인 경우이므로 결과는 "0"이 되어야 합니다. 이를 처리한 후, 최종적으로 가장 큰 수를 나타내는 문자열을 반환합니다.
import java.util.Arrays;
import java.util.Comparator;
class Solution {
public String solution(int[] numbers) {
// numbers 배열을 문자열 배열로 변환
String[] numStrs = new String[numbers.length];
for (int i = 0; i < numbers.length; i++) {
numStrs[i] = String.valueOf(numbers[i]);
}
// 문자열 배열을 커스텀 Comparator를 사용하여 정렬
Arrays.sort(numStrs, new Comparator<String>() {
public int compare(String o1, String o2) {
String order1 = o1 + o2;
String order2 = o2 + o1;
return order2.compareTo(order1); // 내림차순 정렬
}
});
// 정렬된 문자열들을 합쳐서 결과를 만듦
StringBuilder answer = new StringBuilder();
for (String num : numStrs) {
answer.append(num);
}
// 모든 숫자가 "0"인 경우, 결과는 "0"이어야 함
if (answer.charAt(0) == '0') {
return "0";
}
return answer.toString();
}
}