[백] 10989 수 정렬하기 3 - 메모리 초과 어렵다

serotonins·2023년 6월 24일
0

Coding Q

목록 보기
14/17

단순히 다 입력 받고 그 리스트 sort해서 제출하면서 오 쉽당ㅎ 했는데 입력이 최대 천만개까지...

메모리가 초과되었다고 해서 나름 머리 굴려 딕셔너리 1~10000 만들어서 카운트 올리는 식으로 했는데 여전히 메모리 초과
왜지!!! 10000개면 40KB밖에 안 되는데!

검색해보니 pypy3 쓰면 print() 대신 sys.stdout.write() 써야 메모리 초과가 안 난다고 한다. + input() 대신 sys.stdin.readline()
얘는 자동으로 개행을 안 해줘서 sys.stdout.write(str(i) + '\n') 이런 식으로 써야한다.

j번 반복해서 프린트 했어야 했는데 sys.stdout.write((str(i) + '\n') * j) 이렇게 하는 거보다 for문 써야 메모리 초과 안 난다고 한다. str을 최대 10000번 곱한 걸 저장해놓게 되는 거니까 그런 건가보다.

시간 줄이려고 하면 리스트 만들 때도 num_list = [0 for _ in range(n)] 대신 num_list = [0] * n

import sys
input = sys.stdin.readline

n = int(input())
numlist = [0] * 10001
for i in range(n): numlist[int(input())] += 1
for i in range(1, 10001): 
  for j in range(numlist[i]):
    sys.stdout.write(str(i) + '\n')

0개의 댓글