정수 내림차순으로 배치하기
문제 설명
함수 solution은 정수 n을 매개변수로 입력받습니다. n의 각 자릿수를 큰 것부터 작은 순으로 정렬한 새로운 정수를 리턴해주세요. 예를 들어 n이 118372면 873211을 리턴하면 됩니다.
제한 조건
n은 1이상 8000000000 이하인 자연수입니다.
입출력 예
작성코드
import java.util.*;
class Solution {
public long solution(long n) {
String str = Long.toString(n); // ①
List<Character> list = new ArrayList<Character>(); //②
for (int i = 0; i < str.length(); i++) { //③
list.add(str.charAt(i));
}
list.sort(Comparator.reverseOrder()); // ④
String temStr = ""; //⑤
for (int i = 0; i < list.size(); i++) {
temStr += list.get(i);
}
return Long.parseLong(temStr); //⑥
}
}
코드 설명
① 우선 정렬을 하기 위해 long타입 n값을 Wrapper Class의 메서드인 Long.toSting()을 String타입으로 변환하여 str 변수에 담아주었다.
② char타입의 배열을 사용해도 되지만 ArrayList의 sort를 활용해서 구현하고 싶어 ArrayList를 선언해주었다.
③ list에 값을 넣어주기 위해 for문을 이용하여 str문자열의 길이까지. charAt 메서드를 통해 character 값을 넣어준다.
④ ArrayList에서 제공하는 sort메서드를 활용해 내림차순으로 정렬할 수 있도록 했다. sort메서드는 기본적으로 오름차순으로 정렬되기 때문에 내림차순으로 정렬하려면 위와 같이 작성해주어야 한다.
만약 ArrayList를 사용하지 않고 char타입의 배열로 선언해주었다면 Arrays.sort(배열 참조 변수명, Collections.reverseOrder()); 를 사용해주면 된다.
⑤ 이제 내림차순으로 정렬했으니 값을 담을 문자열 변수를 하나 선언해 준 다음, list에 있는 값을 for문을 활용하여 값을 넣어준다.
⑥ temStr에 들어있는 값을 반환 값인 Long타입으로 변환하여 값을 리턴해준다.
다른 사람의 풀이
import java.util.*;
class Solution {
public long solution(long n) {
String[] list = String.valueOf(n).split("");
Arrays.sort(list);
StringBuilder sb = new StringBuilder();
for (String aList : list) sb.append(aList);
return Long.parseLong(sb.reverse().toString());
}
}
StringBuilder.reverse()를 활용하면 문자열을 뒤집을 수 있는지... 왜 이제 알았을까요!!! ㅠㅠㅠ