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

yuuforest·2023년 8월 13일

해시

목록 보기
1/5
post-thumbnail

프로그래머스 문제 풀이 - 해시

⭐️파이썬 알고리즘 스터디 공통 문제⭐️

📰 문제


문제 확인 🏃


💡 입출력 예제


✔️ 예제

["classic", "pop", "classic", "classic", "pop"], [500, 600, 150, 800, 2500]

>> [4, 1, 3, 0]
["classic", "pop", "classic", "classic"], [500, 600, 150, 800]

>> [3, 0, 1]
["classic", "pop", "classic", "classic", "pop"], [500, 600, 500, 150, 2500]

>> [4, 1, 0, 2] 

💬 풀이


🎵 첫번째 풀이

def solution(genres, plays):

    answer = []

    Music = {}

    for idx in range(len(genres)):

        genre = genres[idx]
        play = plays[idx]

        Music.setdefault(genre, [0])
        Music[genre][0] += play
        Music[genre].append((play, idx))

    Music = sorted(Music.items(), key=lambda x: x[1][0], reverse=True)

    for music in Music:
        
        temp = sorted(music[1][1:], key=lambda x:(-x[0], x[1]))

        answer.append(temp[0][1])
        if len(temp) > 1: 
            answer.append(temp[1][1])

    return answer

🎵 두번째 풀이

from collections import defaultdict

def solution(genres, plays):

    answer = []

    Music = defaultdict(lambda: [0])

    for idx, (genre, play) in enumerate(zip(genres, plays)):

        Music[genre][0] += play
        Music[genre].append((play, idx))

    Music = sorted(Music.items(), key=lambda x: x[1][0], reverse=True)

    for music in Music:
        
        temp = sorted(music[1][1:], key=lambda x:(-x[0], x[1]))

        answer.append(temp[0][1])
        if len(temp) > 1: 
            answer.append(temp[1][1])

    return answer

🎵 세번째 풀이 😇

from collections import defaultdict

def solution(genres, plays):

    answer = []

    count_genre = defaultdict(list)
    count_play = defaultdict(int)

    for idx, (genre, play) in enumerate(zip(genres, plays)):
        count_play[genre] += play
        count_genre[genre].append((idx, play))

    for (g, _) in sorted(count_play.items(), key=lambda x:-x[1]):
        for (p, _) in sorted(count_genre[g], key=lambda x:(-x[1], x[0])) [:2]:
            answer.append(p)

    return answer


✒️ 생각


profile
🐥 Backend Developer 🐥

0개의 댓글