잡화/코딩테스트

[프로그래머스]정수 내림차순으로 배치하기(JAVA)

꾹꾹이 2022. 6. 10.
728x90

문제 설명

함수 solution은 정수 n을 매개변수로 입력받습니다. n의 각 자릿수를 큰것부터 작은 순으로 정렬한 새로운 정수를 리턴해주세요. 예를들어 n이 118372면 873211을 리턴하면 됩니다.

제한 조건
  • n은 1이상 8000000000 이하인 자연수입니다.

 


나의 풀이

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
28
29
30
31
class Solution {
    public long solution(long n) {
        String answer = "";
        String str = Long.toString(n);
        
        int[] arr = new int[str.length()];
        
        //long타입의 숫자를 Int배열로 올긴다.
        for(int i = 0; i < str.length(); i++) {
            String s = str.substring(i, i+1);
            arr[i] = Integer.parseInt(s);
        }
        
        //내림차순 정렬
        for(int j = 0; j < str.length()-1; j++){
            for(int i = 0; i < str.length()-1; i++) {
                if (arr[i] < arr[i+1]) {
                    int tmp = arr[i+1];
                    arr[i+1= arr[i];
                    arr[i] = tmp;
                }
            }
        }
        
        for(int i = 0; i < str.length(); i++){
            answer += arr[i];
        }
        
        return Long.parseLong(answer);
    }
}
cs

숫자를 배열에 담고, 배열 내에서 각 숫자별로 크기를 비교한 뒤 내림차순으로 정렬시켰다.

정렬시킨 배열을 다시 문자열에 담아 형변환하여 반환시켜주었다.

api, 메소드를 최대한 사용하지 않고 풀려하다보니 다소 복잡한 풀이가 되었다.

 


다른 사람의 풀이

1
2
3
4
5
6
7
8
9
10
11
12
13
import java.util.*;
 
class Solution {
  public long solution(long n) {
        String[] list = String.valueOf(n).split("");
        Arrays.sort(list);
 
        StringBuilder sb = new StringBuilder();
        for (String aList : list) sb.append(aList);
 
        return Long.parseLong(sb.reverse().toString());
  }
}
cs

sort 메소드와 StringBuilder를 사용한 풀이이다.

sort로 배열을 오름차순으로 정렬한 뒤, 반복문과 StringBulder를 이용하여 정렬된 값을 문자열에 담았다.

마지막으로 reverse메소드를 통해 내림차순으로 정렬해주었다.

 

 

 

댓글