정수 n의 각 자릿수를 내림차순으로 정렬해서 반환하는 문제.
n = 118372 → 873211
n = 1234 → 4321
long 타입 숫자를 문자열로 변환 후 각 자릿수를 int[]로 변환1단계 - 자릿수 추출
Long.toString(n)으로 숫자를 문자열로 변환하고, substring(i, i+1)으로 한 글자씩 잘라 Integer.parseInt()로 정수 배열에 저장하였다.
2단계 - 버블정렬
버블정렬은 인접한 두 원소를 비교해서 조건에 맞지 않으면 교환하는 방식을 반복한다. 큰 숫자가 앞에 오도록 arr[i] < arr[i+1]일 때 교환하였다.
arr = [4, 3, 1, 2]
1라운드:
4 vs 3 → 4>3 → 그대로 [4, 3, 1, 2]
3 vs 1 → 3>1 → 그대로 [4, 3, 1, 2]
1 vs 2 → 1<2 → 교환 [4, 3, 2, 1]
2라운드:
4 vs 3 → 그대로
3 vs 2 → 그대로
2 vs 1 → 그대로
결과: [4, 3, 2, 1] ✅
3단계 - 숫자로 변환
정렬된 배열을 문자열로 이어붙인 뒤 Long.parseLong()으로 변환해서 반환하였다.
구체적으로 정리한 풀이 흐름:
Long.toString(n)으로 문자열 변환int[]로 저장Long.parseLong()으로 반환class Solution {
public long solution(long n) {
String answer = "";
String str = Long.toString(n);
int[] arr = new int[str.length()];
for (int i = 0; i < str.length(); i++) {
String s = str.substring(i, i + 1);
arr[i] = Integer.parseInt(s);
}
// 버블정렬: 큰 숫자가 앞으로 오도록 정렬
for (int j = 0; j < str.length() - 1; j++) {
for (int i = 0; i < str.length() - 1; i++) {
if (arr[i] < arr[i + 1]) {
int tmp = arr[i + 1];
arr[i + 1] = arr[i];
arr[i] = tmp;
}
}
}
for (int i = 0; i < str.length(); i++) {
answer += arr[i];
}
return Long.parseLong(answer);
}
}
