본문 바로가기

코딩 테스트

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

728x90

문제


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

 

 

-  출력 예시  -

정답 코드


<  내 정답 코드  >

import java.util.ArrayList;
import java.util.Collections;

class Solution {
    public long solution(long n) {
        String result = "";
        String num = n + "";
        ArrayList<Long> list = new ArrayList<>();

        for (int i = 0; i < num.length(); i++) {
            char ch = num.charAt(i);
            long nn = ch - '0';
            list.add(nn);
        }

        Collections.sort(list, Collections.reverseOrder());

        for (long i : list) {
            result += i;
        }

        return Long.parseLong(result);
    }
}

 

<  타인 답변 코드  >

import java.util.*;

class Solution {
    public long solution(long n) {
        String[] strArr = (n + "").split("");
        Arrays.sort(strArr, Collections.reverseOrder());
        
        StringBuilder sb = new StringBuilder();
        for (String s : strArr) {
            sb.append(s);
        }
        
        return Long.parseLong(new String(sb));
    }
}

이것을 주의하자!


-  일단 long 형 매개변수를 String 객체로 변환한다. 그리고 charAt() 메서드를 이용해서 숫자 하나씩 뺀 다음 ArrayList< Long > 에 저장한다. Collections 의 sort() 메서드를 통해 정렬을 한 뒤, 다시 String 객체로 만들고 마지막에 long 형으로 변환하는 방법을 사용했다.

 

long    ☞    [ String    ☞    char    ☞    Long    ☞    ArrayList 에 저장 ]     ☞      컬렉션  정렬    

 

 

-  타인 답변 코드를 봐도 비슷한 알고리즘이다. 물론 더 깔끔하다. 정렬까지 가는 과정이 매우 간단하다. 그리고 정렬된 리스트를 long 형으로 변환하는 과정도 StringBuilder 을 사용했다.

 

long    ☞    [ String    ☞    String [] ]     ☞      배열  정렬  

 

 

-  정렬하는 방법에는 기존의 메서드를 사용하면 된다. 컬렉션 프레임워크의 경우 'Collections.sort()' 와 'list.sort()' 메서드가 있다. 기본적으로 오름차순 정렬이다. 배열도 'Arrays.sort()' 메서드를 사용할 수 있다. 만약 내림차순으로 바꾸고 싶다면 'Collections.reverseOrder()'을 매개변수로 넣으면 된다.