문제
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 sys
input = sys.stdin.readline
print = sys.stdout.write
arr = [0]*10000
for i in range(int(input())): # 1~10000까지 각 숫자의 개수 구하기
arr[int(input())-1] += 1
for i in range(10000):
for j in range(arr[i]): # 각 숫자의 개수만큼 반복, 숫자의 개수가 0이면 무시
print(str(i+1)+'\n')
계수 정렬은 O(n+k)의 시간복잡도를 가지기 때문에 숫자의 최댓값 k가 작을 때만 사용 가능
( n = 10이고 k가 100이면 시간복잡도는 O(n²) )