정수의 자릿수를 내림차순으로 정렬하기

coldrice99·2024년 8월 7일
0

문제 설명

주어진 정수 n의 각 자릿수를 내림차순으로 정렬한 새로운 정수를 반환하는 함수를 작성해 보겠다. 예를 들어, 입력된 정수가 118372라면, 반환값은 873211이 되어야 한다.

해결 방법

이 문제를 해결하기 위해 다음과 같은 단계를 수행할 것이다:

  1. 정수 n을 문자열로 변환한다.
  2. 문자열을 문자 배열로 변환한다.
  3. 문자 배열을 정렬한다.
  4. 정렬된 배열을 역순으로 재배열한다.
  5. 재배열된 문자열을 다시 정수로 변환하여 반환한다.

코드 구현

import java.util.Arrays;

public class Solution {
    public long solution(long n) {
        // 1. 정수를 문자열로 변환하고 문자 배열로 변환
        char[] digits = Long.toString(n).toCharArray();
        
        // 2. 문자 배열을 오름차순으로 정렬
        Arrays.sort(digits);
        
        // 3. 정렬된 배열을 역순으로 재배열
        StringBuilder sb = new StringBuilder(new String(digits)).reverse();
        
        // 4. 문자열을 다시 정수로 변환하여 반환
        return Long.parseLong(sb.toString());
    }
}

코드 설명

1. 정수 -> 문자열 -> 문자 배열 변환

char[] digits = Long.toString(n).toCharArray();
  • Long.toString(n): 입력받은 정수 n을 문자열로 변환한다. 예를 들어, n118372이라면 이 부분의 결과는 "118372"라는 문자열이 된다.
  • .toCharArray(): 변환된 문자열을 문자 배열로 변환한다. "118372" 문자열은 ['1', '1', '8', '3', '7', '2']라는 문자 배열로 변환된다.

이 과정에서 우리는 정수의 각 자릿수를 개별 문자로 분리하여 배열에 저장하게 된다.

2. 문자 배열 오름차순 정렬

Arrays.sort(digits);
  • Arrays.sort(digits): 자바의 Arrays 클래스에 있는 sort 메서드를 사용하여 문자 배열 digits를 오름차순으로 정렬한다.
  • 정렬 전: ['1', '1', '8', '3', '7', '2']
  • 정렬 후: ['1', '1', '2', '3', '7', '8']

문자 배열을 오름차순으로 정렬하면 각 문자가 유니코드 순서(즉, 사전순)대로 배열된다.

3. 정렬된 배열을 역순으로 재배열

StringBuilder sb = new StringBuilder(new String(digits)).reverse();
  • new String(digits): 문자 배열 digits를 문자열로 변환한다. 예를 들어, ['1', '1', '2', '3', '7', '8'] 배열은 "112378" 문자열로 변환된다.
  • new StringBuilder(...): 변환된 문자열을 StringBuilder 객체로 감싼다. StringBuilder는 문자열을 조작하기 위한 유용한 클래스다.
  • .reverse(): StringBuilder 객체의 reverse 메서드를 사용하여 문자열을 역순으로 재배열한다. "112378" 문자열은 "873211"로 역순 정렬된다.

StringBuilder를 사용하면 문자열을 효율적으로 조작할 수 있고, 특히 문자열의 역순 정렬이 간편해진다.

4. 문자열을 다시 정수로 변환

return Long.parseLong(sb.toString());
  • sb.toString(): StringBuilder 객체를 다시 문자열로 변환한다. 이 문자열은 이제 내림차순으로 정렬된 상태다.
  • Long.parseLong(...): 최종 문자열을 long 타입의 정수로 변환한다. "873211" 문자열은 873211 정수가 된다.

이 과정을 통해 최종적으로 내림차순으로 정렬된 자릿수를 가진 새로운 정수를 얻을 수 있다.

전체 코드 요약

import java.util.Arrays;

public class Solution {
    public long solution(long n) {
        // 1. 정수를 문자열로 변환하고 문자 배열로 변환
        char[] digits = Long.toString(n).toCharArray();
        
        // 2. 문자 배열을 오름차순으로 정렬
        Arrays.sort(digits);
        
        // 3. 정렬된 배열을 역순으로 재배열
        StringBuilder sb = new StringBuilder(new String(digits)).reverse();
        
        // 4. 문자열을 다시 정수로 변환하여 반환
        return Long.parseLong(sb.toString());
    }
}

이 코드는 주어진 정수 n의 자릿수를 내림차순으로 정렬한 후 새로운 정수를 반환하는 과정을 구현하고 있다. 각 단계는 간단하지만, 함께 조합하면 강력한 기능을 제공한다. 이 접근 방식은 입력된 정수의 자릿수를 큰 것부터 작은 순서로 재배열하여 새로운 정수를 만드는 데 매우 효율적이다.

예시

아래는 이 함수가 어떻게 동작하는지 예시를 통해 보여주겠다:

  • 입력: n = 118372
  • 문자열 변환 및 배열 정렬: ["1", "1", "2", "3", "7", "8"]
  • 배열 역순 재배열: ["8", "7", "3", "2", "1", "1"]
  • 최종 결과: 873211

이와 같이, 함수는 주어진 정수의 자릿수를 내림차순으로 정렬한 후 새로운 정수를 반환한다.

결론

자바로 정수의 자릿수를 내림차순으로 정렬하는 방법을 살펴보았다. 간단한 문자열 및 배열 조작을 통해 문제를 쉽게 해결할 수 있었다. 이 접근 방식은 다양한 유사한 문제에서도 응용될 수 있다.


문제 출처 - https://school.programmers.co.kr/learn/courses/30/lessons/12933

profile
서두르지 않으나 쉬지 않고

0개의 댓글