프로그래머스 문제(Java) No.10 <정수 내림차순으로 배치하기>

오하수·2026년 1월 23일

이 문제는 정수 n을 매개 변수로 입력받으면 각 자릿수를 큰 수부터 작은 순으로 정렬하여 값을 반환하는 문제이다.


이코드는 정수 -> 문자 -> 배열 -> 정렬 -> 다시 정수로 풀어야한다.

1. 정수를 문자열로 반환

  • 정수 상태에서 자릿수로 바로 접근하기 위해 사용
  • 문자열로 바꾸면 한글자씩 처리가 가능

2. 자릿수를 배열로 저장

  • Collections.reverseOdrder()가 내림차순을 쓸 때 사용하는 것인데 Integer 타입에서만 사용이 가능함

3. 문자열를 숫자로 반환
s.charAt(i) -> 문자 '1', '8'에서 -'0'을 하면 ASCII 코드로 숫자로 반환됨

4.내림차순 정렬

5. 숫자를 문자열로 다시 붙이기

  • 기존 값에 10을 곱해 자리를 왼쪽으로 밀고 현재 자릿수를 더해 새로운 정수를 만든다.

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

class Solution {
  public long solution(long n) {
    String s = String.valueOf(n);
    Integer[] arr = new Integer[s.length()];

    for (int i = 0; i < s.length(); i++) {
      arr[i] = s.charAt(i) - '0';
    }

    Arrays.sort(arr, Collections.reverseOrder());

    long answer = 0;
    for (int j = 0; j < arr.length; j++) {
      answer = answer * 10 + arr[j];
    }

    return answer;
  }
}

정수를 문자열로 변환해서 배열에 저장한 뒤 내림차순으로 정렬하고 곱셈 연산을 이용해서 새로운 정수를 직접 재구성하면 된다.

public class Main {
  public static void main(String[] args) {
    Solution sol = new Solution();
    long n = 118372;
    long result = sol.solution(n);
    System.out.println(result);
  }
}

다른 사람 풀이

import java.util.*;

class Solution {
  public long solution(long n) {
    String s = String.valueOf(n);
    Integer[] arr = new Integer[s.length()];

    for (int i = 0; i < s.length(); i++) {
      arr[i] = s.charAt(i) - '0';
    }
    Arrays.sort(arr, Collections.reverseOrder());

    
    StringBuilder sb = new StringBuilder();
    for (int j = 0; j < arr.length; j++) {
      sb.append(arr[j]);
    }

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

StringBuilder는 문자열을 계속 이어 붙이기 위한 객체로 쓰이고 내부적으로 가변 문자열 구조를 가진다.

예) sb.append(8), sb.append(7) ~~~

-> "873211"

그리고 Long.parseLong(sb.toString());으로 문자열 형태를 정수형 Long으로 변환시켜 반환한다.

profile
오늘하루도수고하세용~

0개의 댓글