문제 링크: https://school.programmers.co.kr/learn/courses/30/lessons/42579
문제 분류는 해쉬이나, 해쉬랑 정렬을 같이 요구하는 문제이다.
접근은 문제에 자세하게 나와있어서 어렵지 않았으나, sort()
에서 다중 조건을 주는 부분에서 재생 횟수는 내림차순, 인덱스는 오름차순을 해야하는 것을 놓쳐 쓸데없는 시간을 허비했었다.
from typing import List
from collections import defaultdict
def solution(genres: List[str], plays: List[int]):
answer = []
total = []
song = defaultdict(list)
#장르별로 (재생횟수, 인덱스)를 모음
for i in range(len(genres)):
song[genres[i]].append((plays[i], i))
#장르별로 재생횟수로 내림차순, 같은 재생횟수에 대해서는 오름차순으로 정렬
#장르별 총 재생횟수를 계산함
for key in song:
song[key].sort(key = lambda x: (-x[0], x[1]))
total.append((sum(i[0] for i in song[key]), key))
#가장 많이 재생된 장르부터 정렬된 인덱스를 모음
total.sort(reverse = True)
for i in total:
key = i[1]
answer += list(map(lambda x: x[1], song[key][:2]))
return answer