N개의 수가 주어졌을 때, 이를 오름차순으로 정렬하는 프로그램을 작성하시오.
(JAVA) 시간제한 : 3초 / 메모리제한 : 512MB
첫째 줄에 수의 개수 N(1 ≤ N ≤ 10,000,000)이 주어진다. 둘째 줄부터 N개의 줄에는 숫자가 주어진다. 이 수는 10,000보다 작거나 같은 자연수이다.
예시 -
10
5
2
3
1
4
2
3
5
1
7
첫째 줄부터 N개의 줄에 오름차순으로 정렬한 결과를 한 줄에 하나씩 출력한다.
예시 -
1
1
2
2
3
3
4
5
5
7
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws Exception, IOException {
int[] arr = new int[10000];
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
int num = Integer.parseInt(bf.readLine());
for( int i = 0 ; i < num ; i++) {
int a = Integer.parseInt(bf.readLine());
arr[a-1]++;
}
for( int i = 0 ; i < 10000 ; i++) {
for( int j = 0 ; j < arr[i] ; j++) {
bw.write(i+1+"\n");
}
}
bw.flush();
}
}
자바에서 입출력 시간을 줄이는 방법 :
Scanner, System.out.println대신 ==> BufferedReader, BufferedWriter사용!
Counting Sort (계수 정렬) :
시간복잡도 O(n)짜리 빠른 정렬방식!
해당 문제에서는 입력받을 수 있는 수가 10000이하로 정해져 있기 때문에 Counting Sort를 쓸 수 있다.