문제 설명
일반적인 정렬 문제와는 달리, 이번 문제는 주어진 숫자를 구성하는 각 자릿수들을 내림차순으로 정렬하여 새롭게 만들어진 수를 출력하는 것입니다.
사용자로부터 입력받는 숫자는 음이 아닌 정수로 가정하며, 각 자릿수는 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
결론
본 강좌에서는 자바를 사용하여 주어진 숫자의 자릿수를 내림차순으로 정렬하는 방법을 상세히 설명하였습니다.
알고리즘의 단계별 접근 방법과 최종 코드를 통해 문제를 해결하는 과정을 이해하셨기를 바랍니다.
이후 실전에서는 더욱 복잡한 문제를 접할 수 있으므로, 꾸준한 연습을 통해 문제 해결 능력을
키우는 것이 중요합니다. 감사합니다.