import java.util.Arrays;
import java.util.Comparator;
public class solution {
public String solution(int[] numbers) {
String answer = "";
String[] str = new String[numbers.length];
for (int i = 0; i < numbers.length; i++) {
str[i] = String.valueOf(numbers[i]);
}
Arrays.sort(str, new Comparator<String>() {
@Override
public int compare(String a, String b) {
return (b+a).compareTo(a+b);
}
});
if(str[0].equals("0")) return "0";
for(String answers : str) {
answer += answers;
}
return answer;
}
}
compareTo 메서드
: 문자열의 사전 순 값을 비교하여 그에 해당하는 int값을 리턴한다
a = b일 경우 0
a > b (좌측 값이 큰 경우) 1
a < b (좌측 값이 작은 경우) -1
Arrays.sort 를 통해서 내림차순 , 오름차순 정렬이 가능하다.
위의 코드는 내림차순 정렬이고 오름차순은 compareTo의 인자를 숫자를 바꿔주면 된다.
그나저나 왜 b+a를 하고 a+b를 하는 것일까!
그것은 바로
a와 b를 그대로 쓰게 되면 9보다 30이 크게 된다.
이 문제에서는 첫번째 숫자가 큰게 더 크므로 9가 30보다 앞에 와야한다,
그러므로 만약에 a 가 9 b가 30이라치면
a+b는 930, b+a는 309가 되는 것이다.
그렇게 하여 비교를 하여 내림차순 정렬을 한다.
그리고 정렬을 한 후 문제가 00000만 나와서 첫번째(젤 큰 숫자가) 0일 경우에는 0을 리턴해야한다.
그게 아니라면 String배열에 있는 값을 answer에 붙여서 출력한다.
728x90
'알고리즘 > 프로그래머스 문제풀이' 카테고리의 다른 글
[프로그래머스] 위장 java / HashMap 사용 (0) | 2021.06.01 |
---|---|
[프로그래머스] 전화번호 목록 java /효율성 성공! Arrays.sort (2) | 2021.05.31 |
[프로그래머스] 모의고사 java / 완전 탐색 / 완전 탐색 패턴은 나머지 연산자로 (0) | 2021.05.27 |
[프로그래머스] k번째 수 java / 배열 자르기 / 배열 정렬 /Arrays.copyOfRange (0) | 2021.05.26 |
[프로그래머스] 완주하지 못한 선수 java / Array.sort(해시로 다시 풀기 체크) (0) | 2021.05.25 |