[프로그래머스 LV.3] 베스트앨범

문제 풀이

사실 레벨 3 치고는 그닥 어렵다고 생각하지 않는 문제입니다. 그냥 딕셔너리 2개 써서 정렬해서 푸니까 풀리더라구요..

장르별 총 합을 저장하는 genre_total 딕셔너리와 장르 + 번호 별 노래가 재생된 횟수를 저장하는 genre_songs 딕셔너리 두개로 풀면 됩니다.

먼저 genres와 plays를 하나의 range로 받아서 양쪽에 저장한 다음 genre_total을 정렬하여 재생횟수 순으로 나열하고, 그 순서대로 2개씩 뽑아버리면 쉬운 문제입니다.

여기에 heapq를 섞는 방식으로 풀면 정렬이 필요하지 않을 수 있겠네요.

풀이 코드

def solution(genres, plays):
    answer = []
    genre_total = {}
    genre_songs = {}
    n = len(genres)
    
    # 딕셔너리에 값들 넣기
    for i in range(n):
        g, p = genres[i], plays[i]
        genre_total[g] = genre_total.get(g, 0) + p
        
        if g not in genre_songs:
            genre_songs[g] = []
            
        genre_songs[g].append((p, i))
    
    # 총 재생 횟수로 정렬
    sorted_genres = sorted(genre_total.items(), key=lambda x: x[1], reverse=True)
    
    # 재생 횟수가 높은 애들을 기준으로 정렬 후 2개만 뽑아냄
    for genre, _ in sorted_genres:
        songs = sorted(genre_songs[genre], key=lambda x: (-x[0], x[1]))
        answer.extend([idx for p, idx in songs[:2]])

    return answer
반응형