본문 바로가기

개발/algorithm

[프로그래머스][level3] 베스트앨범 -python

문제 링크

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

 

코딩테스트 연습 - 베스트앨범

스트리밍 사이트에서 장르 별로 가장 많이 재생된 노래를 두 개씩 모아 베스트 앨범을 출시하려 합니다. 노래는 고유 번호로 구분하며, 노래를 수록하는 기준은 다음과 같습니다. 속한 노래가

programmers.co.kr

 

풀이 - 다른 블로그 참고 

  • defaultdict 사용 
  • play_dic[장르] :  (고유번호, 재생수)
  • genre_dic[장르] : 장르별 총 재생수 
from collections import defaultdict

def solution(genres, plays):
  answer = []
  play_dic = defaultdict(list)
  genre_dic = defaultdict(int)

  for i in range(len(genres)):
  # 장르별 재생수 더하기 
    genre_dic[genres[i]] += plays[i]
  # 장르별 고유번호와 재생수 
    play_dic[genres[i]].append((i, plays[i]))
 
 # 총 재생수 기준으로 정렬 후 장르 반환 
  items = sorted(genre_dic, key = lambda x : genre_dic[x],reverse=True)
  
  # 장르별로 베스트 앨범 두개 
  for item in items:
  # 재생수 기준으로 정렬 
    tmp = sorted(play_dic[item], key = lambda x : x[1],reverse=True)
  # 고유번호 저장 
    for idx, play in tmp[:2]:
      answer.append(idx)

  return answer