알고리즘

[프로그래머스, 파이썬] 명예의 전당 (1)

hminor 2024. 3. 13. 10:53
반응형

풀이

  • 해당 문제는 명예의 전당에 있는 점수 중 최저점을 결과로 출력하는 것이기에
  • heapq를 사용하면 좋을 것 같다는 생각을 했다.
  • 그래서 li를 초기값으로 -1로 준 다음 heapq로 변경한 다음
  • score 길이 만큼 반복하여 현재의 점수가 li에 있는 최소값 보다 클 경우 추가하고
  • heapq에 최소값을 빼고 현재 점수를 추가하는 형식으로 했으며
  • 여기서 num은 i가 k보다 작을 경우
  • 초기값인 -1로 계속 들어올 것이기에 num을 넣어 해결
  • 해당 문제에서 이상하게 9,11번이 런타입 에러가 발생해서
  • 어떤 문제일까 고민을 했는데 
  • k가 score의 길이보다 큰 경우에 대해서 처음에 생각하지 못했던 것이었다.

 

import heapq

def solution(k, score):
    result = [0]*len(score)
    li = [-1]*k
    num = 20000
    heapq.heapify(li)
    for i in range(len(score)):
        if score[i] >= li[0]:
            num = min(num, score[i])
            heapq.heappop(li)
            heapq.heappush(li,score[i])
        if k > i: result[i] = num
        else: result[i] = li[0]
    return result