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

윤민선·2026년 8월 16일

프로그래머스

목록 보기
67/78
post-thumbnail

문제 설명

정수 n의 각 자릿수를 내림차순으로 정렬해서 반환하는 문제.

n = 118372 → 873211
n = 1234   → 4321

접근 방법

  1. long 타입 숫자를 문자열로 변환 후 각 자릿수를 int[]로 변환
  2. 버블정렬로 내림차순 정렬
  3. 정렬된 배열을 다시 숫자로 변환해서 반환

1단계 - 자릿수 추출

Long.toString(n)으로 숫자를 문자열로 변환하고, substring(i, i+1)으로 한 글자씩 잘라 Integer.parseInt()로 정수 배열에 저장하였다.

2단계 - 버블정렬

버블정렬은 인접한 두 원소를 비교해서 조건에 맞지 않으면 교환하는 방식을 반복한다. 큰 숫자가 앞에 오도록 arr[i] < arr[i+1]일 때 교환하였다.

arr = [4, 3, 1, 2]
 
1라운드:
4 vs 3 → 4>3 → 그대로  [4, 3, 1, 2]
3 vs 1 → 3>1 → 그대로  [4, 3, 1, 2]
1 vs 2 → 1<2 → 교환    [4, 3, 2, 1]
 
2라운드:
4 vs 3 → 그대로
3 vs 2 → 그대로
2 vs 1 → 그대로
 
결과: [4, 3, 2, 1] ✅

3단계 - 숫자로 변환

정렬된 배열을 문자열로 이어붙인 뒤 Long.parseLong()으로 변환해서 반환하였다.

구체적으로 정리한 풀이 흐름:

  1. Long.toString(n)으로 문자열 변환
  2. 각 자릿수를 int[]로 저장
  3. 버블정렬로 내림차순 정렬
  4. 배열을 문자열로 이어붙여 Long.parseLong()으로 반환

최종 코드

class Solution {
    public long solution(long n) {
        String answer = "";
        String str = Long.toString(n);
 
        int[] arr = new int[str.length()];
 
        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);
    }
}

실행 결과

0개의 댓글