코딩일지/python 백준 알고리즘

python 백준 알고리즘 10989번: 수 정렬하기 3

야언 2022. 9. 20. 18:12

https://www.acmicpc.net/problem/10989

 

10989번: 수 정렬하기 3

첫째 줄에 수의 개수 N(1 ≤ N ≤ 10,000,000)이 주어진다. 둘째 줄부터 N개의 줄에는 수가 주어진다. 이 수는 10,000보다 작거나 같은 자연수이다.

www.acmicpc.net

 

 

카운팅 정렬(Counting Sort, 계수 정렬) - 주어진 배열의 값 범위가 작은 경우 빠른 속도를 갖는 정렬 알고리즘, 최댓값과 입력 배열의 원소 값 개수를 누적합으로 구성한 배열로 정렬을 수행한다.

 

이번에는 기존방식 사용시 메모리 초과가 뜨게 된다. 공간복잡도를 줄이는 형식으로 풀어야 하는 문제.

 

 

내 제출

import sys

n = int(sys.stdin.readline())

num_list = [0] * 10001  # index가 0부터 시작이므로 10001개 생성

for _ in range(n):
    num_list[int(sys.stdin.readline())] += 1  # 배열마다 각 숫자가 들어감
    
for i in range(10001):
    if num_list[i] != 0:
        for j in range(num_list[i]):
            print(i)