[CT] 백준 14729 칠무해(정렬)

Kyungmin·2024년 5월 21일
0

CodingTest_Python

목록 보기
6/12

📎 백준 14729 칠무해

📝 문제

입력

첫째 줄에 학생의 수 N(8 ≤ N ≤ 10,000,000)이 주어진다.
둘째 줄부터 N개의 줄에는 학생들의 성적이 무작위로 주어진다. 성적은 최소 0점부터 최대 100점까지 0.001 점 단위로 부여된다.

출력

하위 7명의 성적을 점수가 낮은 순으로 각 줄마다 출력한다. 하위 7명의 성적의 커트 라인에 동점자가 있을 경우에도 7명만 출력을 하면 된다.

즉 학생의 수 N 이 주어지고 N 에 맞는 점수가 주어지면 낮은 순으로 7개만 출력하면 된다.


1. 첫번째 시도 - 실패

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 문을 종료하는 방법으로 구현하려 하였다. 하지만 정답은 나와도 백준에서 돌려보니 메모리 초과가 났다.


2. 두번째 시도 - 성공

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 로 입력을 받고 포매팅을 사용하여 출력하여 문제를 해결하였다.

profile
Backend Developer

0개의 댓글