본문 바로가기

Python/프로그래머스

[프로그래머스] [Python] 베스트앨범

문제 풀이

 

from collections import defaultdict

def solution(genres, plays):
    answer = []
    
    # int값을 value로 가진 딕셔너리 생성
    play_count_by_genre = defaultdict(int)
    # list를 value로 가진 딕셔너리 생성
    songs_in_genre = defaultdict(list)

    # 고유번호 생성
    index = [i for i in range(len(genres))]

    for song_id, genre, play in zip(index, genres, plays):
        # 가장 많이 재생된 장르를 찾기 위해 각 장르가 몇번 재생되었는지 체크
        play_count_by_genre[genre] += play
        # 해당 장르에 각 고유번호와 재생횟수를 추가. 재생횟수에 -를 넣는 이유는 정렬시 한 번에 하기 위함
        songs_in_genre[genre].append((-play, song_id))

    # 가장 많이 재생된 장르 리스트의 '키(장르)'를 가져와서 그의 '값(재생횟수)'을 확인하고 가장 많은 순(내림차순)으로 정렬
    genre_in_order = sorted(play_count_by_genre.keys(), key=lambda g: play_count_by_genre[g], reverse=True)


    # 튜플을 해체(extend)하여 고유번호를 가져옴. 위에서 -play를 썼기 때문에 정렬 시 가장 많이 재생된 노래가 가장 앞에 오게 된다
    for genre in genre_in_order:
        answer.extend([song_id for minus_play, song_id in sorted(songs_in_genre[genre])[:2]])
    
    return answer

 

 

 

문제 링크

 

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

 

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

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

programmers.co.kr