programmers.co.kr/learn/courses/30/lessons/42746
숫자들의 배열 int[] numbers가 주어진다.
숫자들을 이어붙였을때(String의 합처럼) 만들 수 있는 가장 큰 수를 반환해야한다.
풀이 .
import java.util.*;
class Solution {
public String solution(int[] numbers) {
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); // 주의, String 끼리는 부등호 연산 사용할 수 없음
}
});
// 예외처리, 맨 앞칸이 0이면 00~0의 형태. 즉, 0
if(arr[0].equals("0")) {
return "0";
}
StringBuilder sb = new StringBuilder();
for(String str : arr) {
sb.append(str);
}
return sb.toString();
}
}
String에 대한 Comparator를 새로 만들어서 문제를 해결했다.
주의할 점은 compare()에서 반드시 compareTo()를 사용해야 한다는 점이다.
return (o1 + o2) < (o2 + o1) ? 1 : -1 을 사용하려고 했으나 String 끼리는 부등호 연산을 사용할 수 없었다.
비슷한 경우로 int 끼리는 compareTo()를 사용할 수 없다. 만약 사용하고 싶다면 Integer를 사용해야한다.
결과 출력에 굳이 StringBuilder를 사용하지 않고 + 연산으로 처리해도 된다.
하지만 시간차가 심하기 때문에 웬만해선 StringBuilder를 사용하는 것이 좋다.
'알고리즘 문제 > 프로그래머스' 카테고리의 다른 글
[PG] 소수 찾기 JAVA (0) | 2021.01.01 |
---|---|
[PG] 모의고사 JAVA (0) | 2021.01.01 |
[PG] K 번째 수 (0) | 2020.12.31 |
[PG] 이중 우선순위 큐 JAVA (0) | 2020.12.31 |
[PG] 디스크 컨트롤러 JAVA (0) | 2020.12.31 |