정수 내림차순으로 배치하기
한 줄 요약자릿수를 오름차순으로 정렬한 뒤 거꾸로 읽으면 큰 숫자부터 배치된다.
제출 코드: 원문에 없음. FAIL 결과와 정답 풀이만 남아 있다. 아래 코드는 복습용 정답 풀이이며, 실제 제출본의 오류 원인을 재현한 것은 아니다.
import java.util.Arrays;
// 오답노트의 정답 풀이를 실행 가능한 클래스로 정리. 제출 코드는 원문에 없음.
public class DescendingDigitsString {
public long solution(long n) {
String[] arr = String.valueOf(n).split("");
Arrays.sort(arr);
StringBuilder sb = new StringBuilder();
for (int i = arr.length - 1; i >= 0; i--) {
sb.append(arr[i]);
}
return Long.parseLong(sb.toString());
}
}또 다른 풀이는 % 10으로 맨 끝 자리를 꺼내고 / 10으로 버린 다음 정렬한다. 수학적 분리 방식을 함께 보자.
숫자 자체에는 길이 속성이 없고, 배열은 arr.length, 문자열은 str.length()다. 입력이 최대 80억이므로 반환형과 파싱은 long 및 Long.parseLong을 사용한다. 반복해서 문자열을 조립할 때는 StringBuilder로 누적할 수 있다.
7999999999를 정렬하면 입력 상한인 80억보다 커져도 괜찮을까?
- Java 두 풀이 모두 20,008개 입력 통과: 1~10,000 전수·무작위 10,000·경계 8개.
- 기댓값은 정렬 대신 숫자 빈도표로 만들었다.
- 제출 당시 FAIL과 로컬 정답 풀이 PASS는 서로 다른 기록이다.