import sys
input = sys.stdin.readline
n = int(input())
base = [0] * 10001 # Index는 0부터니까
for _ in range(n): # 숫자 저장
num = int(input())
base[num] += 1
for i in range(10001): # 출력
if base[i] != 0:
for j in range(base[i]):
print(i)
(사실 이전 공모전 할 때도 append 썼다가 속도때문에 혼난적이 있다. 그게 왜그런가 했더니 이런 이유였구만...!)
Python의 list는 초깃값을 설정하지 않는 동적배열이다. 그래서 리스트가 꽉 채워지면 더블링(미리 초깃값을 작게 잡아 배열을 생성한 뒤 데이터가 꽉 채워지면 늘려주고 복사) 방식을 통해 크기를 늘려주는 동작을 계속해서 해줘야한다. 이렇게 더블링을 할 때 기존의 메모리 + 2배(혹은 1.12배) 늘어난 메모리를 동시에 잡아먹어서 메모리 누수가 일어난다. (기존 집 + 이사가는 집)
또한 이렇게 계속해서 데이터를 옮겨줌으로 속도가 느려지는건 당연하게 느껴진다.
그래서 나온 방법이 미리 N개의 공간을 만들어주고 그 공간의 값만 바꿔주는 식으로 진행하면 속도도 빨라지고, 메모리가 오버되는 것도 막아줄 수 있다. (그래서 ai모델만들때도 0 배열 만들어놓고 값을 바꾸는건가)
크 오늘도 하나 알아가서 기분이 좋다!