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

 

 

문제풀이

check_list를 [0] * 10001로 초기화 리스트 제작 후

입력 받은 숫자 값을 인덱스에 맞게 +1 추가

여러개 나오면 반복적으로 +1

 

check_list의 결과

[0, 2, 2, 2, 1, 2, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0

 

출력은 0이 아닌 경우에 인덱스에 들어간 값만큼 반복해서 숫자를 출력해준다.

import sys

n = int(input())

check_list = [0] * 10001        #[0]으로 초기화

for i in range(n) :
    input_num = int(sys.stdin.readline())

    check_list[input_num] = check_list[input_num] + 1   #입력값 개수만큼 인덱스에 추가

for i in range(10001) :
    if check_list != 0 :                                #0제외
        for j in range(check_list[i]) :                 #입력한 개수만큼 출력
            print(i)

 

[백준 | 파이썬 | 실버5] 10989번: 수 정렬하기 3