
이 문제는 정수 n을 매개 변수로 입력받으면 각 자릿수를 큰 수부터 작은 순으로 정렬하여 값을 반환하는 문제이다.
이코드는 정수 -> 문자 -> 배열 -> 정렬 -> 다시 정수로 풀어야한다.
1. 정수를 문자열로 반환
2. 자릿수를 배열로 저장
3. 문자열를 숫자로 반환
s.charAt(i) -> 문자 '1', '8'에서 -'0'을 하면 ASCII 코드로 숫자로 반환됨
4.내림차순 정렬
5. 숫자를 문자열로 다시 붙이기
import java.util.Arrays;
import java.util.*;
import java.util.Collections;
class Solution {
public long solution(long n) {
String s = String.valueOf(n);
Integer[] arr = new Integer[s.length()];
for (int i = 0; i < s.length(); i++) {
arr[i] = s.charAt(i) - '0';
}
Arrays.sort(arr, Collections.reverseOrder());
long answer = 0;
for (int j = 0; j < arr.length; j++) {
answer = answer * 10 + arr[j];
}
return answer;
}
}
정수를 문자열로 변환해서 배열에 저장한 뒤 내림차순으로 정렬하고 곱셈 연산을 이용해서 새로운 정수를 직접 재구성하면 된다.
public class Main {
public static void main(String[] args) {
Solution sol = new Solution();
long n = 118372;
long result = sol.solution(n);
System.out.println(result);
}
}

import java.util.*;
class Solution {
public long solution(long n) {
String s = String.valueOf(n);
Integer[] arr = new Integer[s.length()];
for (int i = 0; i < s.length(); i++) {
arr[i] = s.charAt(i) - '0';
}
Arrays.sort(arr, Collections.reverseOrder());
StringBuilder sb = new StringBuilder();
for (int j = 0; j < arr.length; j++) {
sb.append(arr[j]);
}
return Long.parseLong(sb.toString());
}
}
StringBuilder는 문자열을 계속 이어 붙이기 위한 객체로 쓰이고 내부적으로 가변 문자열 구조를 가진다.
예) sb.append(8), sb.append(7) ~~~
-> "873211"
그리고 Long.parseLong(sb.toString());으로 문자열 형태를 정수형 Long으로 변환시켜 반환한다.
