백준 - JAVA/정렬

[백준] 10989번 : 수 정렬하기 3 _ JAVA ( 주석 설명 )

wch_s 2023. 2. 7. 01:14

1번

→ int 배열을 이용한 Counting 정렬

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Main {
    //시간 복잡도 : O(n)
    //공간 복잡도 : 입력값의 범위만큼의 공간 필요
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); //빠른 입력을 위해 버퍼를 이용해 입력을 받는다.
        StringBuilder sb = new StringBuilder(); //빠른 출력 위함

        int range = 10000; //입력값의 범위는 1<=N<=range 이다.
        int[] ary = new int[range+1]; //입력값의 범위에 따라 range+1 용량의 배열을 선언했다.

        int N = Integer.parseInt(br.readLine()); //입력받을 수의 개수를 입력받는다.

        for(int i=0;i<N;++i){
            int num = Integer.parseInt(br.readLine());
            ++ary[num]; //음수 또한 입력받은 수로 배열 인덱스로 설정하고 +1을 한다. (중복 수를 포함하므로)
        }

        for(int i=1;i<=range;++i){ //1부터 차례대로 배열을 전체 검색하기 때문에 자연스럽게 오름차순으로 정렬이 된다.
            while(ary[i]>=1) { //중복만큼 반복을 한다.
                sb.append(i).append('\n'); //입력받은 수에 한해 StringBuilder에 저장한다.
                --ary[i]; //출력을 위한 저장이 되었으므로, -1 감소를 한다.
            }
        }

        System.out.println(sb); //정렬된 값을 출력한다.
    }
}