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

이진규·2022년 9월 30일
1

프로그래머스(PYTHON)

목록 보기
59/64

문제

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

나의 코드

"""

"""

def solution(genres, plays):
    
    n = len(genres)
    genre_dict = dict()
    answer = []
    
    for i in range(n): # 노래 장르와 플레이 수 딕셔너리로 정리
        if genres[i] in genre_dict:
            genre_dict[genres[i]].append((i, plays[i]))
        else:
            genre_dict[genres[i]] = [(i, plays[i])]
            
    genre_rank = dict()
    for genre in genre_dict.keys(): # 플레이 수의 합을 장르별로 정리
        songs = genre_dict[genre]
        play_sum = 0
        for song in songs:
            play_sum += song[1]
        genre_rank[genre] = play_sum
    
    genre_rank = sorted(genre_rank.items(), key=lambda x:x[1], reverse=True) # 플레이 수의 합이 큰 순서대로 정렬
    
    for genre in genre_rank: # 주어진 조건에 따라 최대 2개의 노래의 고유번호를 출력
        
        song_rank = sorted(genre_dict[genre[0]], key=lambda x : (x[1], -x[0]), reverse=True) # ★플레이 수로 내림차순 후 고유번호 순으로 오름차순★
        
        for num, cnt in song_rank[:2]:
            answer.append(num)
    
    return answer
            
    
    

설명

해시 문제

lambda를 이용한 정렬방법 배울 수 있음

참고 자료

profile
항상 궁금해하고 공부하고 기록하자.

0개의 댓글