https://school.programmers.co.kr/learn/courses/30/lessons/42746
문제
0 또는 양의 정수가 주어졌을 때, 정수를 이어 붙여 만들 수 있는 가장 큰 수를 알아내 주세요.
풀이
1) int[]를 String[]으로 만든다.
2) String[]을 정렬한다. 이때, 그냥 정렬하지 말고 (o1, o2) -> (o2+o1).compareTo(o1+o2), 즉 두 문자열을 합친 값 중 가장 큰 값을 기준으로 내림차순 정렬한다. (안하면 오름차순으로 정렬되는데, 이때 3과 30이 있을 경우 30뒤에 3이 와버린다.)
3) 만약 맨 앞이 0일 경우 답이 000000...식으로 되기에 0으로 처리한다.
코드
import java.util.*;
class Solution {
public String solution(int[] num) {
String[] arr = new String[num.length];
for(int i=0; i<num.length; i++){
arr[i] = Integer.toString(num[i]);
}
Arrays.sort(arr, (o1, o2) -> (o2+o1).compareTo(o1+o2));
StringBuilder sb = new StringBuilder();
if (arr[0].equals("0")) {
return "0";
}
for(int i=0; i<arr.length; i++){
sb.append(arr[i]);
}
String answer = sb.toString();
return answer;
}
}