# 문제 설명
함수 solution은 정수 n을 매개변수로 입력받습니다. n의 각 자릿수를 큰것부터 작은 순으로 정렬한 새로운 정수를 리턴해주세요. 예를들어 n이 118372면 873211을 리턴하면 됩니다.
# 제한 조건
n은 1이상 8000000000 이하인 자연수입니다.
# 입출력 예
n: 118372
answer: 873211
sort 메서드 사용하지 않고 생각나는 대로 정렬해보았다.
class Solution {
public long solution(long n) {
long answer = 0;
String strnum = Long.toString(n);
StringBuilder sb = new StringBuilder(strnum);
//값을 비교하여 j인덱스에 해당하는 값이 더 큰 경우, i인덱스 값과 교체하여 내림차순 정렬
for(int i=0; i<strnum.length()-1; i++){
char temp; // 값 저장 변수
for(int j=i+1; j<strnum.length(); j++){
if (strnum.charAt(j) > strnum.charAt(i)){
temp = strnum.charAt(j); // 값 저장
sb.setCharAt(j, strnum.charAt(i)); //교체
sb.setCharAt(i, temp); //교체
strnum = sb.toString(); //stringbuilder -> string 변환하여 strnum갱신
}
}
}
answer = Long.parseLong(strnum); //string -> long 변환하여 answer에 저장
return answer;
}
}
버블 정렬이랑 비슷하지만 아님.... 엄청 비효율적인 코드다..!! (이중 루프 + 교환할 때마다 StringBuilder 갱신)
Arrays.sort 메서드를 사용하면 직관적이고 효율적인 코드를 작성할 수 있다.
import java.util.Arrays;
class Solution {
public long solution(long n) {
long answer = 0;
// n을 string으로 변환한 후 char type 배열로
char[] digits = Long.toString(n).toCharArray();
Arrays.sort(digits); // 오름차순 정렬
StringBuilder sb = new StringBuilder(new String(digits));
sb.reverse(); // 내림차순으로 reverse
answer = Long.parseLong(sb.toString());
return answer;
}
}
정수 n의 각 자릿수를 정렬하기 위해서 long -> String -> char 로 변환하여 배열에 저장한다.
Arrays.sort() 메서드를 사용하여 오름차순 정렬한다.
StringBuilder 클래스의 reverse() 메서드를 이용하기 위해 char[] -> String -> StringBuilder 로 타입을 변환한다.
reverse() 메서드를 이용하여 내림차순 정렬로 뒤집는다.
long타입 변수에 저장하기 위해 StringBuilder -> String -> long 으로 타입을 변환한다.
타입 변환을 여러 번 해야하는 번거로움이 있지만 손쉽게 long형 정수의 각 자릿수를 내림차순으로 정렬할 수 있다.
'Algorithm' 카테고리의 다른 글
문자열을 정수로 바꾸기 (0) | 2024.11.14 |
---|
댓글