๋ฌธ์
N๊ฐ์ ์๊ฐ ์ฃผ์ด์ก์ ๋, ์ด๋ฅผ ์ค๋ฆ์ฐจ์์ผ๋ก ์ ๋ ฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
์ ๋ ฅ
์ฒซ์งธ ์ค์ ์์ ๊ฐ์ N(1 ≤ N ≤ 10,000,000)์ด ์ฃผ์ด์ง๋ค. ๋์งธ ์ค๋ถํฐ N๊ฐ์ ์ค์๋ ์ซ์๊ฐ ์ฃผ์ด์ง๋ค. ์ด ์๋ 10,000๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์ ์์ฐ์์ด๋ค.
์ถ๋ ฅ
์ฒซ์งธ ์ค๋ถํฐ N๊ฐ์ ์ค์ ์ค๋ฆ์ฐจ์์ผ๋ก ์ ๋ ฌํ ๊ฒฐ๊ณผ๋ฅผ ํ ์ค์ ํ๋์ฉ ์ถ๋ ฅํ๋ค.
์์ ์ ๋ ฅ 1
10
5
2
3
1
4
2
3
5
1
7
์์ ์ถ๋ ฅ 1
1
1
2
2
3
3
4
5
5
7
ํ์ด
์์ ๋ฒ์๊ฐ ์๋ค๋ฉด ์นด์ดํ ์ ๋ ฌ์ ์ฌ์ฉํ๋ฉด ๋์ฑ ๋น ๋ฅด๊ฒ ์ ๋ ฌํ ์ ์๋ค
=> ์นด์ดํ ์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ
import java.io.*;
import java.util.Scanner;
public class B10989 {
static void countingSort(int[] a, int n) {
int max = a[0];
for(int i = 0; i < n; i++) {
if(a[i] > max)
max = a[i];
}
int[] counting = new int[max+1];
int[] b = new int[n];
for(int i = 0; i < n; i++) counting[a[i]]++;
for(int i = 1; i <= max; i++) counting[i] += counting[i-1];
for(int i = n-1; i >= 0; i--) b[--counting[a[i]]] = a[i];
for(int i = 0; i < n; i++) a[i] = b[i];
}
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 n = Integer.parseInt(br.readLine());
int[] sort = new int[n];
for(int i = 0; i < n; i++) {
sort[i] = Integer.parseInt(br.readLine());
}
countingSort(sort, n); // ์นด์ดํ
์ ๋ ฌ
for(int i = 0; i < n; i++) {
bw.write(Integer.toString(sort[i]) +"\n");
}
bw.flush();
}
}