문제 설명
함수 solution은 정수 n을 매개변수로 입력받습니다. n의 각 자릿수를 큰것부터 작은 순으로 정렬한 새로운 정수를 리턴해주세요. 예를들어 n이 118372면 873211을 리턴하면 됩니다.
[제한 조건]
n은 1이상 8000000000 이하인 자연수입니다.
입출력 예
n -> return
118372 -> 873211
import java.util.*;
class Solution {
public long solution(long n) {
String str = Long.toString(n); // a
List<Character> list = new ArrayList<Character>(); // b
for(int i = 0; i < str.length(); i++) { // c
list.add(str.charAt(i));
}
list.sort(Comparator.reverseOrder()); // d
String temStr = ""; // e
for(int i = 0; i < list.size(); i++) {
temStr += list.get(i);
}
return Long.parseLong(temStr); // g
}
}
풀이
a) 정렬하기 위해 long type n 값을 Wrapper Class 메서드인 Long.toSting()을 String 타입으로 변환하여 str 변수에 담는다
b) ArrayList의 sort를 활용해 ArrayList 선언
c) list에 값을 넣어주기 위해 for문을 이용해 str문자열 기일까지 charAt 메서드로 character 값을 넣어준다
d) ArrayList에서 제공하는 sort 메서드를 활용해 내림차순으로 정렬하고, sort 메서드는 기본적으로 오름차순으로 정렬되기 때문에 내림차순으로 정렬하려고 reverseOrder()메서드를 적용
e) 내림차순으로 정렬했으니 값을 담을 문자열 변수를 하나 선언해주고 list에 있는 값을 for문을 활용해 값을 넣어준다
g) temStr에 들어있는 값을 반환 값이 Long 타입으로 형변환해 값을 리턴한다.
다른 풀이
import java.util.*;
class Solution {
public long solution(long n) {
String[] list = String.valueOf(n).split("");
Arrays.sort(list);
StringBulider sb = new StringBuilder();
for(String aList : list) sb. append(aList);
return Long.parseLong(sb.reverse().toString());
}
}