[ 문제 해결1 ]
각 배열에 원소의 자릿 수를 비교해서 정렬해보니 시간이 오버된다는 것을 알 수 있었습니다.
[ 문제 해결2 ]
Comparator 을 사용해 문자열을 붙쳐서 판단 후, 내림차 순 해본다.
compareTo method 는 앞에서부터 비교하고 다른 문자열이 나오면 'a-b' 순서로 문자의 아스키 코드 값을 뺀 결과를 리턴합니다.
* 내림차순 : (o2+o1).compareTo(o1+o2);
* 오름차순 : (o1+o2).compareTo(o1+o2);
[ 코드 ]
import java.util.*;
public class 가장큰수 {
/**
* TODO
* - 문제: 주어진 정수에서 가장 큰 수를 만들어라
* - 정수 배열을 문자 배열로 변환
* - Comparator 을 활용해 내림차 순 정렬
* - compareTo 의 아스키 코드 값 비교를 이용
* **/
public static void main(String[] args) {
int[] arr = {3, 30, 34, 5, 9};
String solution = solution(arr);
System.out.println(solution);
}
public static String solution(int[] numbers) {
String answer = "";
String[] arr = new String[numbers.length];
for (int i = 0; i < arr.length; i++) {
arr[i] = String.valueOf(numbers[i]);
}
Arrays.sort(arr, new Comparator<String>() { // 내림차순 정렬
@Override
public int compare(String o1, String o2) {
return (o2 + o1).compareTo(o1 + o2);
}
});
if(arr[0].equals("0")) return "0";
for (String i : arr) {
answer += i;
}
return answer;
}
}
[ 개념 ]
- Comparator 이 무엇인가?
기본 정렬이 아닌 다른 기준으로 사용하고 싶을 때 사용하는 인터페이스입니다.
그 중 compare를 구현함으로써 임의의 클래스에 대해 정렬 기준을 만들 수 있습니다.
compare override method
- 첫 번째 인자 < 두 번째 인자 : 음수
- 첫 번째 인자 > 두 번째 인자 : 양수
- 첫 번째 인자 == 두 번째 인자 : 0
그래서 Collections.sort 에 comparator 를 인자로 사용하는 부분을 살펴보겠습니다.
인자에는 다음과 같은 항목이 들어갈 수 있습니다.
1. 첫번째 인자 : 서로 다른 클래스에 존재하는 리스트
2. 두번째 인자 : Comparator 인터페이스의 compare 함수를 오버라이딩한 클래스
이렇게 사용하면 사용자가 원하는 형태로 정렬을 구현할 수 있게 됩니다.
'프로그래머스' 카테고리의 다른 글
가장 큰 정사각형 찾기 ( DP 알고리즘 ) (0) | 2023.03.26 |
---|---|
다음 큰 숫자 (1) | 2022.11.20 |
124 나라의 숫자 (0) | 2022.11.20 |
[1차] 캐시 (0) | 2022.11.17 |
최솟값 만들기 (0) | 2022.10.26 |