0 또는 양의 정수가 주어졌을 때, 정수를 이어 붙여 만들 수 있는 가장 큰 수를 알아내 주세요.
주어진 정수가 [6, 10, 2]라면 [6102, 6210, 1062, 1026, 2610, 2106]를 만들 수 있고, 이중 가장 큰 수는 6210입니다.
0 또는 양의 정수가 담긴 배열 numbers가 매개변수로 주어질 때, 순서를 재배치하여 만들 수 있는 가장 큰 수를 문자열로 바꾸어 return 하도록 solution 함수를 작성해주세요.
numbers의 길이는 1 이상 100,000 이하입니다.
numbers의 원소는 0 이상 1,000 이하입니다.
정답이 너무 클 수 있으니 문자열로 바꾸어 return 합니다.
1)
numbers [6, 10, 2]
return 6210
2)
numbers [3, 30, 34, 5, 9]
return 9534330
1) 일단 모든 원소를 새로운 배열에 저장. 이때, 두자리수의 원소는 앞자리만 저장.
2) 새로운 배열에서 비교, 같을 경우, 원래 배열에서 같은 인덱스 값을 비교해 두자리수 이상을 비교.
import java.util.*;
import java.lang.*;
class Solution {
public String solution(int[] numbers) {
String answer = "";
//int배열 string배열 전환
String[] arr = new String[numbers.length];
for(int i=0; i<numbers.length; i++){
arr[i] = String.valueOf(numbers[i]);
}
//배열 정렬, 정렬 규칙으로는 2개를 더하여 더 큰 쪽이 우선순위가 되게 하는
Arrays.sort(arr, new Comparator<String>(){
@Override
public int compare(String s1, String s2){
return (s2+s1).compareTo(s1+s2);
}
});
//0만 들어올 상황 제거
if(arr[0].equals("0")) return "0";
for(int i=0; i<arr.length; i++){
answer+=arr[i];
}
return answer;
}
}