👀 문제
https://programmers.co.kr/learn/courses/30/lessons/12933
👊 도전
1. 설계
- long을 String형으로 변환 후 배열에 넣는다.
- Comparator을 이용해 내림차순으로 정렬한다.
- 내림차순으로 정렬된 배열 원소를 number을 이용해 연결한다.
- String을 long으로 형변환하여 리턴한다.
2. 구현 (성공 코드)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
import java.util.*;
/**
*
* @author HEESOO
*
*/
class Solution {
public long solution(long n) {
long answer = 0;
String str=""+n;
String[] array=str.split("");
Arrays.sort(array, new Comparator<String>(){
@Override
public int compare(String s1, String s2){
return s2.compareTo(s1);
}
});
String number="";
for(String s:array){
number+=s;
}
answer=Long.parseLong(number);
return answer;
}
}
3. 결과
🤟 성공 🤟
4. 설명
- 숫자를 String배열에 자릿수별로 넣는다.
- long을 String으로 변환하기 위해 ““을 연결한 후, split()함수로 쪼개어서 배열에 저장한다.
- Comparator을 이용해 내림차순 정렬한다.
- Arrays에는 내림차순 정렬이 없기 때문에 Comparator을 이용해서 내림차순 정렬한다.
- 정렬된 원소들을 연결한다.
- 정렬된 배열을 순회하며 하나의 문자열로 연결한다.
- String을 long으로 형변환하여 리턴한다.
- Long.parseLong()을 이용한다.
👏 해결 완료!
내림차순 정렬을 위해 Collections.reverse()를 이용할까 하다가 리스트로 변환하는게 귀찮아서 직접 Comparator로 내림차순을 구현하였다. 어떤 사람은 오름차순으로 정렬한 후 역순으로 순회하며 문자열을 만든 것도 보았다. 그것도 나쁘지 않은 것 같다.