[문제링크 - 프로그래머스 - 가장 큰 수] https://school.programmers.co.kr/learn/courses/30/lessons/42746
class Solution {
public String solution(int[] numbers) {
StringBuilder sb = new StringBuilder();
String[] str = new String[numbers.length];
//int[]를 String[]으로 변환
for(int i=0; i<numbers.length; i++){
str[i] = String.valueOf(numbers[i]);
}
//두 수를 번갈아가며 합쳤을 때를 비교하여 큰 값을 앞으로 정렬(내림차순)
Arrays.sort(str, new Comparator<String>(){
@Override
public int compare(String o1, String o2) {
return (o2+o1).compareTo(o1+o2);
}
});
//내림차순으로 정렬된 배열을 순서대로 붙임
if(str[0].equals("0")) //모든 값이 0일 경우, 0을 출력
sb.append(0);
else {
for (int i = 0; i < str.length; i++) {
sb.append(str[i]);
}
}
return sb.toString();
}
}
[6, 10, 2] 로 예시
앞자리가 가장 큰 수
가 앞에 와야 한다.10
, 6
, 2
순서로 1062로 가장 큰 수가 될 수 없다.int[]
에서 String[]
으로 변환해야한다.10
인 경우 앞자리인 1
만 가져온다.6(o1)
,10(o2)
중에 10이 뒤로 간다. 💡 Comparator란?
compare() 메서드를 사용해서 여러가지 특별 조건을 가진 정렬을 구하기 위한 인터페이스
💡 compareTo() 문자열 비교
- 기준값에 비교대상이 포함되어 있을 경우, 서로의 문자열 길이의 차이값을 리턴(단, 같은 위치에 있어야 함.)
- 비교 불가능한 지점의 문자열 아스키값을 기준으로 비교하여 차이값을 리턴
String str = "abcd"; str.compareTo("ab") // 4 - 2 = 2 str.compareTo("c") // 97 - 99 = -2