함수 solution은 정수 n을 매개변수로 입력받습니다. n의 각 자릿수를 큰것부터 작은 순으로 정렬한 새로운 정수를 리턴해주세요. 예를들어 n이 118372면 873211을 리턴하면 됩니다.
n은 1이상 8000000000 이하인 자연수입니다.
✅ 정수 n을 문자열로 변환하여
toCharArray()
를 통해 char 타입의 배열arr[]
에 저장하고,Arrays.sort(arr)
를 수행하여 요소들을 오름차순 정렬하였다. 결과로 내림차순 정렬을 수행한 수를 리턴해야 하므로 문자열result
에 오름차순 정렬된 요소들을 역순으로 결합시키고, 문자열을 다시 long 타입으로 변환하여 리턴한다.
import java.util.*;
class Solution {
public long solution(long n) {
char[] arr = String.valueOf(n).toCharArray();
Arrays.sort(arr);
String result = "";
for(int i=arr.length-1;i>=0;i--) {
result += arr[i];
}
return Long.parseLong(result);
}
}
✅ 위 코드의 경우, 통과는 되었지만 실행 시간이 좀 긴 편이였다. 아무래도 문자열 연산 과정에서 시간이 오래 걸린 것 같아, String 대신 StringBuilder를 사용해봤더니 실행 시간이 확실히 줄어든 것을 볼 수 있었다!
import java.util.*;
class Solution {
public long solution(long n) {
char[] arr = String.valueOf(n).toCharArray();
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());
}
}
➕ 이왕 StringBuilder 쓰는 김에 역순 for문 대신
reverse()
메서드도 써봤다 ,,ㅎ
import java.util.*;
class Solution {
public long solution(long n) {
char[] arr = String.valueOf(n).toCharArray();
Arrays.sort(arr);
StringBuilder sb = new StringBuilder();
for(int i=0;i<arr.length;i++) {
sb.append(arr[i]);
}
return Long.parseLong(sb.reverse().toString());
}
}