Arrays.sort에 Comparator을 사용하여 구현할 수 있습니다.
Comparator은 두 숫자 문자열의 조합을 비교하여 어느 조합이 더 큰지를 판단할 수 있습니다.
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] = Integer.toString(numbers[i]);
Arrays.sort(arr, new Comparator<String>() {
public int compare(String s1, String s2) {
return (s2 + s1).compareTo(s1 + s2);
}
});
if (arr[0].equals("0")) return "0";
for (int i = 0; i < arr.length; i++)
answer += arr[i];
return answer;
}
}
return (s2 + s1).compareTo(s1 + s2);
다음 코드는 s1과 s2를 받아 (s2 + s1)과 (s1 + s2)의 값을 비교합니다.
예를 들어 s1 = "3"이고 s2 = "30"인 경우, (s2 + s1)은 "303", (s1 + s2)는 "330"이 되며 "330"이 더 크기 때문에 s1이 앞에 오도록 정렬합니다.
양수: (s2 + s1)이 (s1 + s2)보다 크므로, s1이 s2 뒤에 배치됩니다.
음수: (s2 + s1)이 (s1 + s2)보다 작으므로, s1이 s2 앞에 배치됩니다.
Comparable과 Comparator는 모두 인터페이스입니다.
인터페이스를 사용하려면 인터페이스 내에 선언된 메서드를 구현해야 합니다.
다음은 Comparator를 구현하여 정렬하는 예제입니다.
List<String> list = Arrays.asList("banana", "apple", "cherry");
Collections.sort(list, new Comparator<String>() {
@Override
public int compare(String s1, String s2) {
return s1.compareTo(s2); // 알파벳 순으로 오름차순 정렬
}
});
compare(o1, o2) 메서드는 o1과 o2의 순서를 결정합니다.
양수: o1이 o2보다 큰 순서로 배치됨 (내림차순)
0: o1과 o2는 같음
음수: o1이 o2보다 작은 순서로 배치됨 (오름차순)
.
.
.
문제는 아래에서 확인할 수 있습니다.
https://school.programmers.co.kr/learn/courses/30/lessons/42746
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
'Algorithm > Programmers' 카테고리의 다른 글
[프로그래머스_JAVA_알고리즘] 문자열 정렬하기 (2) #정렬 (1) | 2024.11.02 |
---|---|
[프로그래머스_JAVA_알고리즘] H-Index #정렬 (0) | 2024.11.01 |
[프로그래머스_JAVA_알고리즘] 전화번호 목록 #해시 (2) | 2024.10.26 |
[프로그래머스_JAVA_알고리즘] 주사위의 개수 #해시 (0) | 2024.10.24 |
[프로그래머스_JAVA_알고리즘] K번째수 (0) | 2024.10.13 |