Arrays.sort(arr, new Comparator< String >(){
public int compare(String s1, String s2){
return (s2+s1).compareTo(s1+s2);
}
});
Arrays.sort(arr, (s1, s2) ->
(s2+s1).compareTo(s1+s2));
arr.charAt(0) 으로 첫 문자열을 꺼내오는 것 보다는
arr.startsWith("0") 으로 시작 위치를 가져오는 것을 권장.
import java.util.stream.*; 를 사용하여 매개변수로 전달되는 int 배열을 String으로 그대로 전달할 수 있다.
IntStream.of(numbers)
.mapToObj(n -> String.valueOf(n))
위 코드도 마찬가지로 아래와 같이 축약 가능
IntStream.of(numbers)
.mapToObj(String::valueOf)
그리고 위에서 String으로 변환한 문자열을 sort() 한 뒤 하나로 합침
String answer = IntStream.of(numbers)
.mapToObj(String::valueOf)
.sort((s1,s2) -> (s2+s1).compareTo(s1+s2))
.collect(Collectors.joining())
풀이 언어 : JAVA
<1차>
class Solution {
public boolean needSwitch(int a, int b) {
String ab = String.valueOf(a) + String.valueOf(b);
String ba = String.valueOf(b) + String.valueOf(a);
if(ab.compareTo(ba) > 0)
return true;
else
return false;
}
public String solution(int[] numbers) {
String answer = "";
for(int i = numbers.length - 1; i > 0; --i) {
for(int j = 0; j < i; ++j) {
if(needSwitch(numbers[i],numbers[j])) {
int tmp = numbers[i];
numbers[i] = numbers[j];
numbers[j] = tmp;
}
}
}
int sum = 0;
for(int num : numbers) {
sum += num;
answer += String.valueOf(num);
}
if(sum == 0)
return "0";
else
return answer;
}
}
<2차 (외부 풀이)>
import java.util.stream.*;
class Solution {
public String solution(int[] numbers) {
String answer = IntStream.of(numbers)
.mapToObj(String::valueOf)
.sort((s1,s2) -> (s2+s1).compareTo(s1+s2))
.collect(Collectors.joining())
return answer;
}
}