함수 solution은 정수 n을 매개변수로 입력받습니다. n의 각 자릿수를 큰것부터 작은 순으로 정렬한 새로운 정수를 리턴해주세요. 예를들어 n이 118372면 873211을 리턴하면 됩니다.
처음 풀이
class Solution {
public long solution(long n) {
String answer = "";
String str = Long.toString(n);
int[] arr = new int[str.length()];
//long타입의 숫자를 Int배열로 올긴다.
for(int i = 0; i < str.length(); i++) {
String s = str.substring(i, i+1);
arr[i] = Integer.parseInt(s);
}
//내림차순 정렬
for(int j = 0; j < str.length()-1; j++){
for(int i = 0; i < str.length()-1; i++) {
if (arr[i] < arr[i+1]) {
int tmp = arr[i+1];
arr[i+1] = arr[i];
arr[i] = tmp;
}
}
}
for(int i = 0; i < str.length(); i++){
answer += arr[i];
}
return Long.parseLong(answer);
}
}
문제를 보고 제일 먼저 생각난 방법이 정렬을 사용하는 방법이였다. 하지만 int가 아닌 long으로 정수를 받아 푸는 문제라 막상 코드를 작성하고나니 너무 복잡해져서 다시 작성해보았다.
다시 작성한 풀이
import java.util.Arrays;
import java.util.Collections;
class Solution {
public long solution(long n) {
long answer = 0;
String str = Long.toString(n); // 입력값n을 문자열로 변환하여 str에 저장
String [] arr = str.split(""); // 문자열을 한 글자씩 나누어 배열 arr에 저장
Arrays.sort(arr, Collections.reverseOrder()); // 배열을 역순으로 정렬
str = str.join("", arr); // 정렬된 배열을 다시 하나의 문자열로 합침
answer = Long.parseLong(str); // 문자열을 long 타입으로 변환하여 결과값에 저장
return answer; // 결과값 반환
}
}