본문 바로가기
CodingTest/백준

백준 1427번- 소트인사이드(JAVA)

by 마운틴케이 2020. 9. 9.

www.acmicpc.net/problem/1427

 

1427번: 소트인사이드

첫째 줄에 정렬하고자하는 수 N이 주어진다. N은 1,000,000,000보다 작거나 같은 자연수이다.

www.acmicpc.net

 

주어진 수의 각 자리수를 내림차순으로 정렬하는 문제입니다.

좀 더 깔끔하게 풀 수 있지 않나 싶네요.

 

 

 

 

제가 푼 코드

 

import java.util.Scanner;

public class Main {
    public static void main(String[] args){

        // 1427번 소트인사이드
        Scanner sc = new Scanner(System.in);
        int N= sc.nextInt();

        int amount = (String.valueOf(N).split("")).length;
        int[] arr = new int[amount];

        for(int i=0;i<arr.length;i++){
                arr[i]= N/(int)(Math.pow(10,amount-1));
                N-= (arr[i]*(int)Math.pow(10,amount-1));
                amount--;
        }

        int temp=0;

        if(arr.length>0){
            for(int i=0;i<arr.length;i++){
                for(int j=0;j<i;j++){
                    if(arr[i]>arr[j]){
                        temp=arr[j];
                        arr[j]=arr[i];
                        arr[i]=temp;
                    }
                }
            }
        }

        for(int i=0;i<arr.length;i++){
            System.out.print(arr[i]);
        }

        sc.close();
    }
}

 

풀이과정

1. 정렬할 수를 int 변수 N으로 받습니다.

   이 N의 자릿수를 구해 int amount에 받습니다.

   정렬을 위한 int 1차원 배열 arr를 amount크기로 생성합니다.

 

2. 첫번째 반복문에선 N의 자릿수만큼 반복합니다.

   각 자릿수만 뽑고싶으므로 저는 우선

    N/(int)(Math.pow(10,amount-1));

 

 *Math.pow(int a,int b)

   a의 b제곱을 해주는 메소드 입니다.

   반환값은 double

   

   으로 N을 자릿수-1의 10제곱으로 나눈 몫을 arr에 차례로 담습니다.

   다음 줄에서는 N에서 각 자릿수만큼 값을 빼줬습니다.

   반복문이 돌면서 amount-- 가 수행되므로, 각 자릿수의 값만 담게 됩니다.

     예) N이 2143이라면 arr엔 차례로 2, 1, 4, 3 이 담깁니다.

   

3. 이제 정렬을 할 차례입니다. 정렬 용도의 변수 temp를 만들고

   버블정렬을 수행해 내림차순으로 정렬합니다.

 

4. 정렬된 arr를 출력하고 생성된 Scanner를 닫아줍니다.