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

O2o2✨·2020년 12월 7일
0

알고리즘

목록 보기
15/43

링크 : 프로그래머스 - 해시 > 베스트앨범


코드

def solution(genres, plays):
    answer = []
    genre = dict() # 장르별 재생된 총 횟수
    dic = dict()  # 장르별 [재생수, 고유번호] 
    music = list(zip(genres, plays, range(len(genres)))) # 장르, 재생수, 고유번호
    
    for key, value, idx in music:
        dic[key] = dic.get(key, []) + [[value, idx]]
        genre[key] = genre.get(key, 0) + value

    for key, value in dic.items():
        dic[key] = sorted(value, key=lambda x: [-x[0], x[1]])

    genre = sorted(genre.items(), key= lambda x: x[1], reverse=True)
    
    for g in genre:
        answer.extend(dic[g[0]][:2])
    
    return [i[1] for i in answer]

설명

  • genre: 장르별로 재생된 횟수를 모두 더한 값을 갖는다.
  • dic: 장르별로 [재생수, 고유번호]를 갖는다. (ex. 'classic': [[100, 1], [200, 0]])
  • dic의 value를 정렬한다. 정렬 순서는 기본값은 오름차순이고 람다식에 -를 붙이면 내림차순이 된다. x[0]인 재생수는 내림차순, x[1]인 고유번호는 오름차순으로 정렬한다. 정렬은 재생수를 기준으로 하되 재생수가 같을경우 고유번호를 비교한다.
  • genre의 재생수를 내림차순으로 정렬한다.
  • 가장 많이 재생된 장르부터 출력하고 최대 2곡을 실을 수 있기 때문에 dic[g[0]]을 앞에서부터 2개까지 슬라이싱한다.
  • answer에 담긴 고유번호를 리턴한다.
profile
프론트엔드 & 퍼블리셔

0개의 댓글