on my way

[프로그래머스 코딩테스트 연습] 베스트 앨범 (Python3) 본문

algorithm/Python

[프로그래머스 코딩테스트 연습] 베스트 앨범 (Python3)

wingbeat 2025. 1. 16. 21:14
반응형

https://school.programmers.co.kr/learn/courses/30/lessons/42579

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 

# 리팩 전
from collections import defaultdict

def solution(genres, plays):
    totalPlay = defaultdict(int)
    songs = defaultdict(list)
    for i, [genre, play] in enumerate(zip(genres, plays)):
        totalPlay[genre] += play
        songs[genre].append([play, i])

    best = []
    for genre, play in sorted(totalPlay.items(), key=lambda x: -x[1]):
        for idx, [play, num] in enumerate(sorted(songs[genre], key=lambda x: -x[0])):
            if idx > 1: break
            best.append(num)
    return best
    
# 리팩토링
from collections import defaultdict

def solution(genres, plays):
    totalPlay = defaultdict(int)
    songs = defaultdict(list)
    for i, [genre, play] in enumerate(zip(genres, plays)):
        totalPlay[genre] += play
        songs[genre].append([play, i])

    best = []
    for genre in sorted(totalPlay, key=totalPlay.get, reverse=True):
        for play, cnt in sorted(songs[genre], key=lambda x: -x[0])[:2]:
            best.append(cnt)
    return best

왜 sorted()[:2]를 생각하지 못했을까....

get함수도 key로 사용하는 법을 배웠다.

반응형