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

진예·2023년 12월 16일
0

Programmers

목록 보기
11/45
post-thumbnail

📌 문제

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

✔️ 제한 조건

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

✏️ 입출력

💡 코드

✅ 정수 n문자열로 변환하여 toCharArray()를 통해 char 타입의 배열 arr[]에 저장하고, Arrays.sort(arr)를 수행하여 요소들을 오름차순 정렬하였다. 결과내림차순 정렬을 수행한 수를 리턴해야 하므로 문자열 result에 오름차순 정렬된 요소들을 역순으로 결합시키고, 문자열을 다시 long 타입으로 변환하여 리턴한다.

import java.util.*;
class Solution {
    public long solution(long n) {

        char[] arr = String.valueOf(n).toCharArray();
        Arrays.sort(arr);

        String result = "";
        for(int i=arr.length-1;i>=0;i--) {
            result += arr[i];
        }

        return Long.parseLong(result);
    }
}

✅ 위 코드의 경우, 통과는 되었지만 실행 시간이 좀 긴 편이였다. 아무래도 문자열 연산 과정에서 시간이 오래 걸린 것 같아, String 대신 StringBuilder를 사용해봤더니 실행 시간이 확실히 줄어든 것을 볼 수 있었다!

import java.util.*;
class Solution {
    public long solution(long n) {

        char[] arr = String.valueOf(n).toCharArray();
        Arrays.sort(arr);

        StringBuilder sb = new StringBuilder();
        for(int i=arr.length-1;i>=0;i--) {
            sb.append(arr[i]);
        }

        return Long.parseLong(sb.toString());
    }
}

➕ 이왕 StringBuilder 쓰는 김에 역순 for문 대신 reverse() 메서드도 써봤다 ,,ㅎ

import java.util.*;
class Solution {
    public long solution(long n) {
        
        char[] arr = String.valueOf(n).toCharArray();
        Arrays.sort(arr);
        
        StringBuilder sb = new StringBuilder();
        for(int i=0;i<arr.length;i++) {
            sb.append(arr[i]);
        }
        
        return Long.parseLong(sb.reverse().toString());
    }
}

profile
백엔드 개발자👩🏻‍💻가 되고 싶다

0개의 댓글