문제링크: https://programmers.co.kr/learn/courses/30/lessons/12933
문제 설명
함수 solution은 정수 n을 매개변수로 입력받습니다. n의 각 자릿수를 큰것부터 작은 순으로 정렬한 새로운 정수를 리턴해주세요. 예를들어 n이 118372면 873211을 리턴하면 됩니다.제한 조건
n은 1이상 8000000000 이하인 자연수입니다.
public long solution(long n) {
String str = String.valueOf(n); //n을 string으로
char[] s = str.toCharArray();// str을 한자리씩 char array에 저장
Arrays.sort(s);//오름차순
String sb = new StringBuilder(new String(s)).reverse().toString();
//내림차순
return Long.parseLong(sb);//long type으로 return
}
primitive arrays은 Arrays.sort()를 통한 내림차순을 할 수 없다.Collections.reverseOrder()를 사용하면 error가 발생한다. Object of Array를 사용하면 Collections.reverseOrder()사용 가능하다. ex) Integer, String
그래서 StringBuilder를 사용하여 내림차순으로 정렬.
public long solution2(long n) {
String[] list = String.valueOf(n).split("");
Arrays.sort(list,Collections.reverseOrder());
StringBuilder sb = new StringBuilder();
for(String s:list) {
sb.append(s);
}
return Long.parseLong(sb.toString());
}
String array를 사용하면 Collections.reverseOrder()를 사용해서 정렬 할 수 있다.
Ref:
https://www.geeksforgeeks.org/collections-reverseorder-java-examples/