본문 바로가기
Algorithm

정수 내림차순으로 배치하기

by suyeoneee 2024. 11. 18.

# 문제 설명

함수 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

댓글