예시로 사용할 문제
https://school.programmers.co.kr/learn/courses/30/lessons/42746
숫자를 문자로 바꿔서 값을 비교해서 내림차순으로 바꿔줘야하는 문제이다.
Comparable 사용
import java.util.*;
class Solution {
public String solution(int[] numbers) {
String answer = "";
List<S> list = new ArrayList<>();
for(int i=0;i<numbers.length;i++){
list.add(new S(String.valueOf(numbers[i])));
}
Collections.sort(list);
if(list.get(0).num.equals("0"))return "0";
StringBuilder sb = new StringBuilder();
for(int i=0;i<list.size();i++){
sb.append(list.get(i).num);
}
answer = sb.toString();
return answer;
}
}
class S implements Comparable<S>{
String num;
public S(String num){
this.num=num;
}
@Override
public int compareTo(S o){
return (o.num+this.num).compareTo(this.num+o.num);
}
}
자기자신과 파라미터 클래스와의 비교
클래스 리스트로 정렬하기 위한 기준인 compareTo메소드를 클래스 내에 구현 Collections.sort
import java.util.*;
class Solution {
public String solution(int[] numbers) {
String[] stringNumbers = new String[numbers.length];
for(int i=0;i<numbers.length;i++){
stringNumbers[i]=Integer.toString(numbers[i]);
}
if(stringNumbers[0].equals("0"))return "0";
Arrays.sort(stringNumbers, new Comparator<String>(){
@Override
public int compare(String o1, String o2){
return (o2+o1).compareTo(o1+o2);
}
});
return String.join("",stringNumbers);
}
}
파라미터로 들어오는 두 클래스를 비교
배열을 정렬하기 위한 기준인 compare메소드를 익명클래스로 구현 Arrays.sort
비교할 자료형인 한가지이면 Comparator를, 여러가지면 뭘 쓰든 별 상관없다.