자바 코딩테스트 강좌, 내림차순으로 자릿수 정렬하기

문제 설명

일반적인 정렬 문제와는 달리, 이번 문제는 주어진 숫자를 구성하는 각 자릿수들을 내림차순으로 정렬하여 새롭게 만들어진 수를 출력하는 것입니다.
사용자로부터 입력받는 숫자는 음이 아닌 정수로 가정하며, 각 자릿수는 0부터 9까지의 숫자로 구성됩니다. 예를 들어, 321을 입력받으면
내림차순으로 정렬하여 321을 그대로 출력하고, 2143을 입력받으면 4321을 출력하는 식입니다.

입력 형식 및 조건

  • 입력은 각 자릿수를 포함한 정수 하나입니다.
  • 입력값은 0보다 크거나 같은 32비트 정수의 범위 내에 있어야 합니다.
  • 입력값이 0일 경우 0을 출력합니다.

예제 테스트 케이스

입력 출력
2143 4321
321 321
1110 1110
0 0

문제 접근 방법

문제를 해결하기 위한 접근 방식은 다음과 같습니다.
1. **입력 값 문자열 처리**: 먼저, 입력된 정수를 문자열로 변환하여 각 자릿수를 분리합니다.
2. **자릿수 배열화**: 문자열로 변환된 숫자를 한 자릿수씩 배열에 담습니다.
3. **정렬**: 배열에 담긴 각 자릿수를 내림차순으로 정렬합니다.
4. **출력 형식**: 정렬된 자릿수를 하나의 문자열로 다시 붙여 출력합니다.

상세 알고리즘 과정

각 단계별로 알고리즘을 좀 더 구체적으로 살펴보겠습니다.

1단계: 입력 처리

사용자로부터 입력받은 숫자를 문자열로 변환합니다.
사용자가 입력한 값이 자바의 Scanner 클래스를 통해 받아올 수 있습니다.
예를 들어:

Scanner scanner = new Scanner(System.in);
String input = scanner.nextLine();

2단계: 자릿수 배열화

입력된 문자열의 각 문자를 배열로 구성하기 위해, String 클래스의 toCharArray() 메서드를 사용할 수 있습니다.
이 메서드는 문자열을 구성하는 각 문자를 문자 배열로 변환합니다.

char[] digits = input.toCharArray();

3단계: 정렬

정렬을 위해 Arrays.sort 메서드를 사용할 수 있지만, 내림차순으로 정렬하기 위해
Comparator를 이용한 방법이 필요합니다. 코드는 다음과 같습니다:

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

4단계: 출력 형식

정렬된 문자 배열을 다시 문자열로 변환하여 최종 결과를 출력합니다.
다음 코드와 같이 처리할 수 있습니다:

String result = new String(digits);
System.out.println(result);

최종 코드 구현

모든 단계를 통합한 최종 코드는 다음과 같습니다:

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

public class DescendingOrder {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.print("숫자를 입력하세요: ");
        String input = scanner.nextLine();

        if (input.equals("0")) {
            System.out.println("0");
            return;
        }

        char[] digits = input.toCharArray();
        Arrays.sort(digits, Collections.reverseOrder());
        
        String result = new String(digits);
        System.out.println(result);
    }
}

코드 설명 및 추가 최적화

위 코드는 기본적인 요구 사항을 충족합니다. 그러나, 코드의 몇 가지 부분은 더 최적화할 수 있습니다.
예를 들어, **음수 처리**와 명확한 **입력 유효성 검사**를 추가할 수 있습니다. 사용자로부터 입력받는 문자열이 실제로 숫자인지를 체크하는
로직이 필요할 수 있습니다. 여기에 대한 예시 코드를 제공드립니다.

if (!input.matches("\\d+")) {
            System.out.println("유효하지 않은 입력입니다.");
            return;
        }

테스트 및 검증

최종 코드가 완료되었다면, 다양한 입력을 통해 코드가 잘 작동하는지 테스트해야 합니다.
입력값으로 0, 음수, 다양한 길이의 숫자들을 시도해봐야 합니다.
다음과 같은 테스트 케이스로 프로그램을 검증할 수 있습니다:

  • 입력: 98765 → 출력: 98765
  • 입력: 10203 → 출력: 32100
  • 입력: 9001 → 출력: 9100

결론

본 강좌에서는 자바를 사용하여 주어진 숫자의 자릿수를 내림차순으로 정렬하는 방법을 상세히 설명하였습니다.
알고리즘의 단계별 접근 방법과 최종 코드를 통해 문제를 해결하는 과정을 이해하셨기를 바랍니다.
이후 실전에서는 더욱 복잡한 문제를 접할 수 있으므로, 꾸준한 연습을 통해 문제 해결 능력을
키우는 것이 중요합니다. 감사합니다.