[프로그래머스/Level3] 베스트 앨범(Python)

SeokHyun·2022년 7월 31일
0

프로그래머스

목록 보기
31/32

문제 링크: 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
profile
SI를 넘어 백엔드 엔지니어를 향하여

0개의 댓글