프로그래머스 정수 내림차순 정렬

문제

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

제한사항

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

입출력 예

풀이

import java.util.Arrays;
import java.util.Comparator;

public class ReverseSort {
    public static void main(String[] args) {
        ReverseSort t = new ReverseSort();
        long l = 118372;
        long solution = t.solution(l);
        System.out.println("solution = " + solution);
    }
    public long solution(long l) {
        long answer = 0;
        //long을 받아서 decs으로 정령해야함
        char[] chars = String.valueOf(l).toCharArray();
        int leng = chars.length;
        Integer[] arr = new Integer[leng];

        for(int i=0; i<leng; i++){
            arr[i] = chars[i] - '0';    //숫자로 변환
        }

        Arrays.sort(arr, new Comparator<Integer>() {
            @Override
            public int compare(Integer o1, Integer o2) {
                if(o1>o2) return 1;
                return -1;
            }
        });

        for(int i=0; i<leng; i++){
            answer += (long) (arr[i] * Math.pow(10,i));
        }
        return answer;
    }
}

java의 sort와 Comparator를 사용하여 풀 수 있는 간단한 문제다. 근데 왜 정리해놨냐? Comparator를 사용함에 있어 제한 사항이 있기 때문에 그걸 정리해놓으려고 쓴다!

  1. 기본 자료형 int, long, double, char 등은 사용할 수 없다!
  2. Wrapper class인 String, Intger 등을 사용해야한다!

이 위의 주의점을 알고 사용하면 된다. 평소에 String으로 문제를 거의 대부분 풀다 보니 Comparator를 실제로 정렬할때 사용하면 자료형에서 막혀서 답답한 경우가 생긴다. 그럴땐 위 주의점을 알고 있다면 쉽게 해결해 나갈 수 있을 것이다!

Comparator는 Wrapper class type만 적용 가능하다!

좋은 웹페이지 즐겨찾기