📄 문제 설명
함수 solution은 정수 n을 매개변수로 입력받습니다. n의 각 자릿수를 큰것부터 작은 순으로 정렬한 새로운 정수를 리턴해주세요. 예를들어 n이 118372면 873211을 리턴하면 됩니다.
제한 조건
n
은 1이상 8000000000 이하인 자연수입니다.
입출력 예
x | return |
10 | true |
🔍 문제 접근 방법
단계 1. 정수 n의 자릿수를 문자열로 반환
정수의 자릿수를 하나씩 처리하기 위해 문자열로 반환한다.
long n = 118372;
String str = Long.toString(n); // "118372"
단계 2. 문자열을 문자 배열로 반환
문자열로 반환한 각 자리 수를 쉽게 다루기 위해 문자 배열로 반환한다.
이때, Array 클래스를 import 해주어야 한다.
char[] digits = str.toCharArray(); //['1', '1', '8', '3', '7', '2']
단계 3. 문자 배열을 정렬
Arrays.sort()
를 이용하여 정렬한다. 기본적으로 오름차순으로 정렬된다.
Arrays.sort(digits); // ['1', '1', '2', '3', '7', '8']
단계 4. 배열을 뒤집어 내림차순으로 정렬
문자열은 변하지 않기 때문에 문자열을 수정할 때마다 새로운 객체가 생성되지만,StringBuilder
클래스를 이용하면 동일 객체 내에서 문자열을 수정할 수 있다.
StringBuilder reverse = new StringBuilder(new String(digits)).reverse(); // "873211"
1. new String(digits)
- 입력 : digits는 char의 배열(문자 배열)이다.
['1', '1', '2', '3', '7', '8']
- 동작 : 문자 배열을 문자열로 반환한다.
- 출력 : 문자열
"112378"
2. new StringBuilder - 입력 : 문자열
"112378"
- 동작 : 문자열을 조작할 수 있는 객체 생성
- 출력 : StringBuilder 객체에
"112378"
이 저장된다.3. .reverse() - 입력 : StringBuilder 객체가
"112378"
를 포함하고 있다. - 동작 : reverse()메소드는 문자열을 뒤집는다.
- 출력 : 뒤집힌 StringBuilder 객체
단계 5. 문자열을 정수로 변환
내림차순으로 정렬된 문자열을 다시 정수로 변환한다.
long result = Long.parseLong(reversed.toString());
reverse.toString()
- Long.parseLong 메소드는 String 타입의 입력값만 받는다.
- StingBuilder는 문자열처럼 보이지만, 객체이기 때문에 직접 전달하면 컴파일 에러가 발생한다.
- 따라서, toString()메소드로 String으로 변환하여 Long.parseLong메소드에 전달해야 한다.
🎯 전체 코드
import java.util.Arrays;
class Solution {
public long solution(long n) {
String str = Long.toString(n);
char[] digits = str.toCharArray();
Arrays.sort(digits);
StringBuilder reverse = new StringBuilder(new String(digits)).reverse();
return Long.parseLong(reverse.toString());
}
}
728x90