정수 내림차순으로 배치하기
문제 설명
함수 solution은 정수 n을 매개변수로 입력받습니다. n의 각 자릿수를 큰것부터 작은 순으로 정렬한 새로운 정수를 리턴해주세요. 예를들어 n이 118372면 873211을 리턴하면 됩니다.
제한 조건
- n은 1이상 8000000000 이하인 자연수입니다.
입출력 예
n return
118372 | 873211 |
⭐ Arrays.toString(), join(), Arrays.sort() 함수 외우기
정보처리기사 공부하면서 봤던 정렬 문제랑 비슷해서 금방 풀 수 있을 것이라 생각했다
import java.util.*;
class Solution {
public long solution(long n) {
long answer = 0;
String str = String.valueOf(n);
String[] arr = str.split("");
for(int i=0; i<arr.length; i++) {
for(int j=0; j<arr.length; j++) {
if(Integer.parseInt(arr[i]) > Integer.parseInt(arr[j])) {
String tmp = arr[i];
arr[i] = arr[j];
arr[j] = tmp;
}
}
}
return answer;
}
}
n을 String 배열로 만들고 정렬하였다
그런데 여기서 long형으로 바꾸는데 애를 많이 먹었다
먼저 배열을 String 문자형으로 다시 돌리고 long형으로 변환하려 하였다
(물론 효율적이지 않은 코드라 생각하지만..)
여기서 배열을 문자형으로 변환하는 함수를 검색해보았다
→ Arrays.toString(arr)
import java.util.*;
class Solution {
public long solution(long n) {
long answer = 0;
String str = String.valueOf(n);
String[] arr = str.split("");
for(int i=0; i<arr.length; i++) {
for(int j=0; j<arr.length; j++) {
if(Integer.parseInt(arr[i]) > Integer.parseInt(arr[j])) {
String tmp = arr[i];
arr[i] = arr[j];
arr[j] = tmp;
}
}
}
String changeStr = Arrays.toString(arr);
answer = Long.valueOf(changeStr);
return answer;
}
}
→ Exception in thread "main" java.lang.NumberFormatException: For input string: "[8, 7, 3, 2, 1, 1]"
문자열을 정수로 변환하려 할 때 정수형이 아닌 경우 나타나는 오류이다
대괄호[]와 쉼표, 가 있기 때문에 나타났다
흠… 그럼 어떻게 해야하는걸까..
모르겠어서 질문하기를 참고했다
정렬 함수를 사용해야 하는 것 같아 다시 정수형 정렬 함수를 검색해 보았다
→ 오름차순: Arrays.sort(arr)
내림차순: Arrays.sort(arr ,Collections.reverseOrder())
for문을 이용하는게 아니라 배열로 변환한 후 내림차순 함수를 사용하는 것이었다
그리고 정렬 후 다시 문자열로 변환하는 방법
→ join()함수 - String.join(””, arr)
split() 함수가 자르는 함수였다면 join() 함수는 붙이는 함수이다
import java.util.*;
class Solution {
public long solution(long n) {
long answer = 0;
String str = String.valueOf(n);
String[] arr = str.split("");
Arrays.sort(arr, Collections.reverseOrder());
String sortedStr = String.join("", arr);
answer = Long.parseLong(sortedStr);
return answer;
}
}
문제는 짧은데 풀기가 너무너무 어려웠다…
일단 long형에 대한 문제가 처음 나와서 long 형에 제한이 이렇게 많은 줄 몰랐다
그래도 한 문제로 새로 알게 된 함수가 많아서 좋았다