카테고리 없음
정렬 - 가장 큰 수
JUNGKEUNG
2024. 7. 24. 23:51
반응형
이 문제는 숫자를 이어 붙였을 때의 크기를 비교하여 정렬하는 문제이다. 각 숫자를 문자열로 변환한 후, 두 문자열을 이어 붙였을 때의 크기를 비교하여 정렬할 수 있다.
public class Solution {
public String solution(int[] numbers) {
// 숫자를 문자열로 변환
String[] numStrs = new String[numbers.length];
for (int i = 0; i < numbers.length; i++) {
numStrs[i] = String.valueOf(numbers[i]);
}
// 커스텀 Comparator를 사용하여 정렬
Arrays.sort(numStrs, new Comparator<String>() {
@Override
public int compare(String a, String b) {
// 두 문자열을 이어 붙여 비교
return (b + a).compareTo(a + b);
}
});
// 정렬된 문자열 배열을 하나의 문자열로 합침
StringBuilder sb = new StringBuilder();
for (String num : numStrs) {
sb.append(num);
}
// 결과 문자열이 "0"으로 시작하는 경우를 처리 (모든 숫자가 0인 경우)
if (sb.toString().startsWith("0")) {
return "0";
}
// 최종 결과를 answer에 저장하여 반환
String answer = sb.toString();
return answer;
}
}
풀이
// 숫자를 문자열로 변환
String[] numStrs = new String[numbers.length];
for (int i = 0; i < numbers.length; i++) {
numStrs[i] = String.valueOf(numbers[i]);
}
- 각 숫자를 문자열로 변환 해준다.
// 커스텀 Comparator를 사용하여 정렬
Arrays.sort(numStrs, new Comparator<String>() {
@Override
public int compare(String a, String b) {
// 두 문자열을 이어 붙여 비교
return (b + a).compareTo(a + b);
}
});
- 커스텀를 사용하여 문자열을 정렬 한다.
- 컴스텀은 두 문자열을 이어 붙여 비교한다. 예) "6" 과 "10"을 비교할 때 "610" 과 "106:을 비교하여 더 큰 쪽을 앞으로 오도록 한다.
// 정렬된 문자열 배열을 하나의 문자열로 합침
StringBuilder sb = new StringBuilder();
for (String num : numStrs) {
sb.append(num);
}
- 정렬된 문자열을 하나의 문자열로 합친다.
// 결과 문자열이 "0"으로 시작하는 경우를 처리 (모든 숫자가 0인 경우)
if (sb.toString().startsWith("0") {
return "0";
}
- 문자열이 "0"으로 시작하는 경우를 처리한다.
- 마지막 문자열이 끝나는걸 확인 하고 싶으면 EndWith 를 사용하면된다.
Script
이번 문제에서 어떤걸 사용했는지 확인해보자.
1. String.valueOf 를 이용하여 숫자를 문자열로 변환
2. Comparator (커스텀) 을 이용하여 두 문자열을 붙여서 서로 비교
3. startsWith 이용하여 최종 결과 문자열이 "0"으로 시작하는지 확인