입력
첫째 줄에 학생의 수 N(8 ≤ N ≤ 10,000,000)이 주어진다.
둘째 줄부터 N개의 줄에는 학생들의 성적이 무작위로 주어진다. 성적은 최소 0점부터 최대 100점까지 0.001 점 단위로 부여된다.
출력
하위 7명의 성적을 점수가 낮은 순으로 각 줄마다 출력한다. 하위 7명의 성적의 커트 라인에 동점자가 있을 경우에도 7명만 출력을 하면 된다.
즉 학생의 수 N 이 주어지고 N 에 맞는 점수가 주어지면 낮은 순으로 7개만 출력하면 된다.

import sys
import heapq
n = int(sys.stdin.readline().strip())
result = []
for i in range(n):
grade = str(sys.stdin.readline().strip())
heapq.heappush(result, grade)
a = 0
while result:
a += 1
if a == 8:
break
print(heapq.heappop(result))
heapq 모듈을 사용하여 result 를 꺼내다가 7개를 초과하면 break 를 하여 while 문을 종료하는 방법으로 구현하려 하였다. 하지만 정답은 나와도 백준에서 돌려보니 메모리 초과가 났다.

import sys
import heapq
n = int(sys.stdin.readline().strip())
result = []
for i in range(n):
grade = float(sys.stdin.readline().strip()) # 변경
heapq.heappush(result, grade)
for i in range(7):
print('{:.3f}'.format(heapq.heappop(result)))
위와 같이 코드를 변경하여 메모리 문제를 해결하였다.
내가 문제를 해결한 방법은 다음과 같다.
✅ 문자열(str) 을 부동 소수점(float) 으로 변경
처음 코드에서 소수점을 처리하기위해 숫자 자체를 문자열로 받아 처리하기 위해 str 을 사용하여 출력하였다. 하지만 str 은 문자를 저장하기 위해 추가적인 메모리 오버헤드를 갖는다. 때문에 float 로 입력을 받고 포매팅을 사용하여 출력하여 문제를 해결하였다.