전 문제랑 똑같은데? 했는데 자세히 보니 메모리 제한이 매우 작았다. 그래서 전과 같은 코드를 넣으면 메모리초과가 난다. sort를 사용하는 과정에서 너무 큰 입력값을 받았을 때 메모리 초과가 나는 것 같아.
역시 전에 거 풀면서 썩 좋지 않은 방법이라고 생각하긴 했는데,,
import sys
N = int(input())
num = [0] * 10001
for _ in range(N):
num[int(sys.stdin.readline())] += 1
for i in range(1, 10001):
if num[i] != 0:
for _ in range(num[i]):
print(i)
이렇게 푸는 방법을 계수정렬이라고 한단다.
1. 1~10000까지의 수를 담기 위해 10001 크기를 갖는 리스트를 선언한다. 이 리스트는 각 인덱스에 해당하는 값이 몇 번 나왔는지 counting해서 저장하는 역할을 한다.
2. 입력줄을 하나하나 받아서 해당 숫자에 해당하는 인덱스에 접근해서 값을 1 증가시킨다. 이때 속도를 위해 input 대신 sys를 사용했다.
3. 이제 counting이 끝난 리스트의 각 인덱스에 접근해서 해당 값만큼 그 인덱스값을 반복해서 출력한다.

요새 자꾸 내 힘으로 못 풀고 코드를 보게 된다.... 새로운 알고리즘을 알게 되긴 하지만 꼭 내 머리로 풀어보리라..,,,