정수 내림차순으로 배치하기

박수민·2024년 3월 16일
0

문제 설명

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

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

처음 풀이

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);
    }
}

문제를 보고 제일 먼저 생각난 방법이 정렬을 사용하는 방법이였다. 하지만 int가 아닌 long으로 정수를 받아 푸는 문제라 막상 코드를 작성하고나니 너무 복잡해져서 다시 작성해보았다.

다시 작성한 풀이

import java.util.Arrays;
import java.util.Collections;

class Solution {
    public long solution(long n) { 
        long answer = 0; 
        String str = Long.toString(n); // 입력값n을 문자열로 변환하여 str에 저장
        String [] arr = str.split(""); // 문자열을 한 글자씩 나누어 배열 arr에 저장
        Arrays.sort(arr, Collections.reverseOrder()); // 배열을 역순으로 정렬
        str = str.join("", arr); // 정렬된 배열을 다시 하나의 문자열로 합침
        
        answer = Long.parseLong(str); // 문자열을 long 타입으로 변환하여 결과값에 저장
        return answer; // 결과값 반환
    }
}

0개의 댓글