프로그래머스 베스트 앨범

2021. 10. 12. 19:03문제풀기/프로그래머스

https://programmers.co.kr/learn/courses/30/lessons/42579

 

코딩테스트 연습 - 베스트앨범

스트리밍 사이트에서 장르 별로 가장 많이 재생된 노래를 두 개씩 모아 베스트 앨범을 출시하려 합니다. 노래는 고유 번호로 구분하며, 노래를 수록하는 기준은 다음과 같습니다. 속한 노래가

programmers.co.kr

 

파이썬의 heapq는 최소 힙이기 때문에 정렬에 사용할 값에 마이너스를 붙여주면 최대 힙으로 활용할 수 있다.

 

import heapq
def solution(genres, plays):
    answer = []
    genre_array = dict()
    genre_total = []
    for i in range(len(genres)):
        if genres[i] not in genre_array:
            genre_array[genres[i]] = []
        heapq.heappush(genre_array[genres[i]], (-plays[i], i))

            
    for g in genre_array:
        total = 0
        for p,i in genre_array[g]:
            total += p
        heapq.heappush(genre_total,(total,g))
        
    while genre_total:
        total, now_genre = heapq.heappop(genre_total)
        
        for _ in range(2):
            if genre_array[now_genre]:
                p,i = heapq.heappop(genre_array[now_genre])
                answer.append(i)
            
    return answer