[JAVA/프로그래머스] 연습문제: 정수 내림차순으로 배치하기

👀 문제

https://programmers.co.kr/learn/courses/30/lessons/12933

👊 도전

1. 설계

  1. long을 String형으로 변환 후 배열에 넣는다.
  2. Comparator을 이용해 내림차순으로 정렬한다.
  3. 내림차순으로 정렬된 배열 원소를 number을 이용해 연결한다.
  4. 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. 설명

  1. 숫자를 String배열에 자릿수별로 넣는다.
    • long을 String으로 변환하기 위해 ““을 연결한 후, split()함수로 쪼개어서 배열에 저장한다.
  2. Comparator을 이용해 내림차순 정렬한다.
    • Arrays에는 내림차순 정렬이 없기 때문에 Comparator을 이용해서 내림차순 정렬한다.
  3. 정렬된 원소들을 연결한다.
    • 정렬된 배열을 순회하며 하나의 문자열로 연결한다.
  4. String을 long으로 형변환하여 리턴한다.
    • Long.parseLong()을 이용한다.

👏 해결 완료!

내림차순 정렬을 위해 Collections.reverse()를 이용할까 하다가 리스트로 변환하는게 귀찮아서 직접 Comparator로 내림차순을 구현하였다. 어떤 사람은 오름차순으로 정렬한 후 역순으로 순회하며 문자열을 만든 것도 보았다. 그것도 나쁘지 않은 것 같다.