728x90
반응형
문제
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
[문제 해설]
오름차순으로 n개의 수를 정렬하면 된다. 물론 배열에 저장해서 오름차순으로 정렬하는 방법을 맨 처음 떠올리겠지만 메모리가 8MB밖에 안된다는 것이 이 문제의 함정이다. 따라서 계수정렬을 이용하였다.
계수정렬(Count Sort)알고리즘은 특정한 조건이 부합할 때만 사용할 수 있지만 매우 빠른 정렬 알고리즘이다. 데이터의 개수가 N, 데이터 중 최댓값이 K일 떄, 계수 정렬은 최악의 경우에도 수행 시간 O(N+K)를 보장한다. 여기서 숫자의 크기가 10000보다 작기 때문에 계수정렬을 쓸 수 있는 것이다. 1부터 10000까지의 배열을 0으로 저장해두고 각 숫자가 나올때마다 크기를 1씩 증가시킨다. input을 받을때 같이 data에 숫자를 1씩 증가시키고 나중에 정답으로 출력시켜주면 된다.
import sys
input = sys.stdin.readline
n = int(input())
data=[0]*10001
for _ in range(n):
num = int(input())
data[num-1]+=1
for i in range(10000):
if data[i]!=0:
for j in range(data[i]):
print(i+1)
728x90
반응형
'알고리즘 > 알고리즘 문제' 카테고리의 다른 글
[파이썬] [백준 - 1181번] 단어 정렬 (Sort) (0) | 2021.03.29 |
---|---|
[파이썬] [백준 - 1931번] 회의실 배정 (Dynamic Programming) (0) | 2021.03.29 |
[파이썬] [백준 - 14501번] 퇴사 (Dynamic Programming) (1) | 2021.03.29 |
[파이썬] [백준 - 9625번] BABBA (Dynamic Programming) (0) | 2021.03.24 |
[파이썬] [백준 - 1463번] 1로 만들기 (Dynamic Programming) (0) | 2021.03.24 |