
💡 문제
권장 시간
- 1시간
소요 시간
- 40분
풀이 코드
import java.util.*;
class Solution {
public String solution(int[] numbers) {
// String으로 변환
ArrayList<String> list = new ArrayList<>();
for (int n : numbers) {
list.add(Integer.toString(n));
}
// 이어붙인 String의 크기를 비교 및 정렬
list.sort((a, b) -> (b + a).compareTo(a + b));
// 앞자리가 0이면 숫자를 만들 수 없으니 예외처리
if (list.get(0).equals("0")) {
return "0";
}
// 가장 큰 숫자 출력
StringBuilder sb = new StringBuilder();
for (String num : list) {
sb.append(num);
}
return sb.toString();
}
}
주요사항
이 문제로 처음 알았는데 compareTo 함수는 Override 하지않고도 사용이 가능하다.
그리고, compareTo는 String이나 객체에 대한 비교만 가능하다. (Integer 불가!)
list.sort((a, b) -> (b + a).compareTo(a + b));
정수형의 오름차순 정렬은 아래와 같다.
numbers.sort((o1, o2) -> o1 - o2);
만약 비교도 하고 정렬하고 싶으면? Integer.compare()를 활용하면 된다.
numbers.sort((o1, o2) -> Integer.compare(o1 + o2, o1 * o2));
제한 조건에 따르면 시간복잡도를 고려하여 반복문은 사용하면 안된다는 것을 알 수 있다.
따라서, 정렬 방법을 사용해야한다.