https://school.programmers.co.kr/learn/courses/30/lessons/42746
Arrays.sort(answerArr, (a, b) → (b+a).compareTo(a + b));
- A.compareTo(B)는 A와 B가 같을 경우 0을 return, A가 B보다 클 경우 양수로 return, A가 B보다 작을 경우 음수로 return
- 앞에서부터 비교하다 다른 문자열이 나오면 ‘a-b’ 순서로 해당 문자의 아스키코드 값을 뺀 결과(int)를 리턴
- 내림차순 : (o2+o1).compareTo(o1+o2);
- 오름차순 : (o1+o2).compareTo(o1+o2);
ex) 30과 3일 때,
- a = 30, b = 3이고 내림차순 정렬을 하기 위해 A자리에는 (b+a)로 설정
- 코드는 (”3” + “30”).compareTo(”30” + “3”)이 되고,
- 결과는 “330”이 “303”보다 크기 때문에 양수로 return
- 3, 30 순으로 정렬
- compareTo는 primitive 타입에 대한 Comparator가 없기 때문에 int[ ]같은 경우는 사용할 수 없음..!
import java.util.Arrays;
class Solution {
public String solution(int[] numbers) {
String[] answerArr = new String[numbers.length];
// 숫자를 문자열로 변환
int i = 0;
for(int number : numbers) {
answerArr[i++] = String.valueOf(number);
}
// 정렬
Arrays.sort(answerArr, (a, b) -> (b + a).compareTo(a + b));
// 0만 여러개 있는 배열일 때 하나의 0만 return
if(answerArr[0].equals("0")) return "0";
StringBuilder answer = new StringBuilder();
for(String str : answerArr) {
answer.append(str);
}
return answer.toString();
}
}
import java.util.Arrays;
import java.util.Comparator;
class Solution {
public String solution(int[] numbers) {
String[] nums = new String[numbers.length];
for (int i=0; i<nums.length; i++)
nums[i] = numbers[i] + "";
Arrays.sort(nums, new Comparator<String>() {
public int compare(String o1, String o2) {
return (o2 + o1).compareTo(o1 + o2);
}
});
String ans = "";
for (int i=0; i<numbers.length; i++)
ans += nums[i];
return ans.charAt(0) == '0' ? "0" : ans;
}
}
문자열로 추가할 때는 StringBuilder가 훨씬 빠름..! 배열의 모든 숫자가 0일 때 0출력하기 위해서 예외처리!
'algorithm > Programmers' 카테고리의 다른 글
[JAVA] 달리기 경주 (0) | 2023.04.11 |
---|---|
[JAVA] H-index (0) | 2023.04.04 |
[JAVA] 추억점수 (0) | 2023.04.04 |
[JAVA] K번째 수 (0) | 2023.03.31 |
[JAVA] 올바른 괄호 (0) | 2023.03.31 |