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

일단 해볼게·2023년 12월 27일
0

프로그래머스

목록 보기
79/106

https://school.programmers.co.kr/learn/courses/30/lessons/138477

def solution(k, score):
    answer = []
    honor = [] # 명예의 전당
    
    for i in range(len(score)):
        honor.append(score[i]) 
        honor.sort(reverse = True) # 내림차순 정렬
        honor = honor[:k] # k만큼 짜르기
        answer.append(honor[-1]) # 명예의 전당 최하위 점수 추가
        
    return answer

다른사람 풀이 (heap)

import heapq

def solution(k, score):
    max_heap = []
    answer = []

    for sc in score:
        heapq.heappush(max_heap, (-sc, sc)) # 최대힙으로 저장
        answer.append(max(heapq.nsmallest(k, max_heap))[1]) 
        
    return answer
  1. heapq.nsmallest(k, max_heap)은 max_heap에서 상위 k개의 요소를 반환
  2. max()로 k중에 가장 큰 값 반환
  3. [1]을 이용해 실제 점수 선택

이것만 봐서는 이해가 잘 안가니 예시를 보자.

예시) heapq.nsmallest(k, max_heap)이 (-150, 150), (-120, 120), (-100, 100)을 반환했다고 가정하자. 이 중에서 max() 함수는 k가 가장 큰 (-100, 100)을 선택하고, [1]을 통해 100을 반환한다.

profile
시도하고 More Do하는 백엔드 개발자입니다.

0개의 댓글