Published:
Updated:

  • 딕셔너리를 value만 정렬하여 _는 사용하지 않도록 하고 싶었는데 불가능해서 일단은 item()로 처리했다.
  • 파이썬은 딕셔너리 정렬 기능이 정말 편한 것 같다.


Solution

import collections
from typing import List


# 1. 속한 노래가 많이 재생된 장르를 먼저 수록
# 2. 장르 내에서 많이 재생된 노래를 먼저 수록
# 3. 장르 내에서 재생 횟수가 같은 노래 중에서는 고유 번호가 낮은 노래를 먼저 수록
def solution(genres: List[str], plays: List[int]) -> List[int]:  # (장르, 재생 횟수)
    answer = []

    sum_plays_map = collections.defaultdict(int)
    index_list_plays_map = collections.defaultdict(list)
    for i in range(len(genres)):
        sum_plays_map[genres[i]] += plays[i]
        index_list_plays_map[genres[i]].append([i, plays[i]])

    for genre, _ in sorted(sum_plays_map.items(), key=lambda x: x[1], reverse=True):
        # [:2] -> 가장 많이 재생된 노래를 "두 개씩" 모아 베스트 앨범 출시
        for index, _ in sorted(index_list_plays_map[genre], key=lambda x: (-x[1], x[0]))[:2]:
            answer.append(index)

    return answer


print(solution(["classic", "pop", "classic", "classic", "pop"], [500, 600, 150, 800, 2500]))


Reference

Leave a comment