Algorithm/BAEKJOON

[Java] 10989 수 정렬하기 3

곽수진 2023. 4. 28. 04:56
반응형

문제

N개의 수가 주어졌을 때, 이를 오름차순으로 정렬하는 프로그램을 작성하시오.

 

입력

첫째 줄에 수의 개수 N(1 ≤ N ≤ 10,000,000)이 주어진다. 둘째 줄부터 N개의 줄에는 수가 주어진다. 이 수는 10,000보다 작거나 같은 자연수이다.

 

출력

첫째 줄부터 N개의 줄에 오름차순으로 정렬한 결과를 한 줄에 하나씩 출력한다.

 

import java.util.*;
import java.io.*;

public class Main{
    public static int[] arr;
    public static long result;
    
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        int num = Integer.parseInt(br.readLine());
        arr = new int[num];
        
        for(int i=0; i<num; i++){
            arr[i] = Integer.parseInt(br.readLine());
        }
        br.close();
        Radix_Sort(arr, 5);
        
        for(int i=0; i<num; i++){
            bw.write(arr[i] + "\n");
        }
        bw.flush();
        bw.close();
    }
    
    public static void Radix_Sort(int[] arr, int max_size){
        int[] output = new int[arr.length];
        int jarisu = 1;
        int count = 0;
        
        while(count != max_size){
            int[] bucket = new int[10];
            for(int i=0; i<arr.length; i++){
                bucket[(arr[i] / jarisu) % 10]++;
            }
            for(int i=1; i<10; i++){
                bucket[i] += bucket[i-1];
            }
            for(int i=arr.length-1; i>=0; i--){
                output[bucket[(arr[i] / jarisu % 10)] - 1] = arr[i];
                bucket[(arr[i] / jarisu) % 10]--;
            }
            for(int i=0; i<arr.length; i++){
                arr[i] = output[i];
            }
            jarisu *= 10;
            count++;
        }
    }
}

 

반응형

'Algorithm > BAEKJOON' 카테고리의 다른 글

[Java] 2023 신기한 소수  (0) 2023.04.30
[Java] 11724 연결 요소의 개수  (2) 2023.04.29
[Java] 2751 수 정렬하기 2  (0) 2023.04.27
[Java] 11004 K번째 수  (0) 2023.04.26
[Java] 11399 ATM  (0) 2023.04.25