long 타입의 숫자를 받아서 각 자릿수를 내림차순으로 정렬한 후 반환
예시
입력: 35214
출력: 54321
long → String → Integer[] → 내림차순 정렬 → StringBuilder → long
import java.util.Arrays;
class Solution {
public long solution(long n) {
long answer = 0;
String sumNum = "";
String strNum = String.valueOf(n);
String[] strNumArr = strNum.split("");
Integer[] arrNum = new Integer[strNumArr.length];
for(int i = 0; i < strNumArr.length; i++){
arrNum[i] = Integer.valueOf(strNumArr[i]);
}
Arrays.sort(arrNum, (o1, o2) -> o2 - o1);
for(int factor : arrNum){
sumNum += String.valueOf(factor);
}
return answer = Long.valueOf(sumNum);
}
}
import java.util.Arrays;
class Solution {
public long solution(long n) {
String strNum = String.valueOf(n);
Integer[] arrNum = new Integer[strNum.length()];
StringBuilder sb = new StringBuilder();
for(int i = 0; i < strNum.length(); i++){
arrNum[i] = strNum.charAt(i) - '0';
}
Arrays.sort(arrNum, (o1, o2) -> o2 - o1);
for(int factor : arrNum){
sb.append(factor);
}
return Long.valueOf(sb.toString());
}
}
| 항목 | Before | After | 이유 |
|---|---|---|---|
| 불필요한 변수 | answer, sumNum 선언 | 제거 | 사용하지 않는 변수 정리 |
| 변환 단계 | String → String[] → Integer[] | String → Integer[] | split("") 제거, charAt(i) - '0' 사용 |
| 문자열 합치기 | sumNum += String.valueOf(factor) | StringBuilder.append() | String 불변 객체 반복 생성 방지 |
| 반환 | return answer = Long.valueOf(sumNum) | return Long.valueOf(sb.toString()) | 불필요한 변수 할당 제거 |
'0'(48) ~ '9'(57) ASCII 값이 순서대로 증가하기 때문에
char 타입 그대로 비교해도 숫자 크기 순서와 동일
// Before
arrNum[i] = Integer.valueOf(strNumArr[i]);
// After
arrNum[i] = strNum.charAt(i) - '0';
int[]는 Comparator를 사용할 수 없으므로 Integer[] 사용
Arrays.sort(arrNum, (o1, o2) -> o2 - o1);
| 경우 | 반환값 | 결과 |
|---|---|---|
| o1=3, o2=5 | 양수 | o1이 뒤로 → 5, 3 |
| o1=5, o2=3 | 음수 | o1이 앞에 유지 → 5, 3 |
String은 불변(immutable)이라 += 반복 시 매번 새 객체 생성
// Before
sumNum += String.valueOf(factor); // 매번 새 String 객체 생성
// After
sb.append(factor); // 같은 객체에 이어붙이기
import java.util.Arrays;
class Solution {
public long solution(long n) {
String strNum = String.valueOf(n);
Integer[] arrNum = new Integer[strNum.length()];
StringBuilder sb = new StringBuilder();
for(int i = 0; i < strNum.length(); i++){
arrNum[i] = strNum.charAt(i) - '0';
}
Arrays.sort(arrNum, (o1, o2) -> o2 - o1);
for(int factor : arrNum){
sb.append(factor);
}
return Long.valueOf(sb.toString());
}
}