문제 :
https://school.programmers.co.kr/learn/courses/30/lessons/42746
해결 :
import java.util.*;
class Solution {
public String solution(int[] numbers) {
String[] answer = new String[numbers.length];
for(int i =0; i<answer.length; i++){
answer[i] = String.valueOf(numbers[i]);
}
Arrays.sort(answer, (o1,o2)->(o2+o1).compareTo(o1+o2));
if(answer[0].equals("0")){
return "0";
}
return String.join("",answer);
}
}
풀이 :
- int형 배열을 String형으로 바꿔주어 숫자 자체가 아닌 앞자리의 크기로 비교한다.
- 문자열을 내림차순으로 정렬한다.
그냥 n2.compareTo(n1)만을 하면 다음과 같다.
[ 9, 5, 34, 30, 3 ]
여기엔 문제가 존재한다.
비록 숫자가 작지만 먼저 오는게 더 큰 경우가 생길 수도 있다.
[ 34, 30, 3 ] 이 경우, [ 34, 3, 30 ]이 되어야 한다는 것이다.
34303 < 34330이기 때문이다.
그렇기 때문에 단순 비교가 아니라
n1에 n2를 더한 것과 n2에 n1를 더한 것을 비교하여 내림차순 정렬해주어야 한다.
(n2 + n1).compareTo(n1 + n2)
※ 참조
https://jisunshine.tistory.com/176
'알고리즘 > [프로그래머스] JAVA' 카테고리의 다른 글
[프로그래머스] 예산 (0) | 2024.03.24 |
---|---|
[프로그래머스] 음양 더하기 (0) | 2024.03.24 |
[프로그래머스] 정렬 > K번째수 (0) | 2024.03.20 |
[코딩 기초 트레이닝] 정사각형으로 만들기 (0) | 2024.03.05 |
[코딩 기초 트레이닝] 그림 확대 (1) | 2024.03.05 |