문제
풀이
요구 능력
- 문제의 요구사항을 따라가다보면 그다지 어려운 문제는 아니다.
- 다만 주의해야할 점은 파이썬 딕셔너리에서 sort()를 제공하지 않아 정렬을 위해 내장함수인 sorted()를 사용해야한다.
- 왜지?? 라는 생각이 들텐데 위에 대한 내용은 시간여유가 있으면 정리해봐야겠다. (= 시간이 없어 대충 풀어제낌 ㅠ)
- 밑에 코드는 좀 더 깔끔하게 정리 가능하다.(= 지저분하단 소리)
코드
from collections import defaultdict
def solution(genres, plays):
answer = []
dic_lst = defaultdict(list)
dic_n = defaultdict(int)
arr = []
# dic_n 딕션리에 장르를 키로 플레이된 수를 다 더해준다
# dic_lst에는 재생된 곡의 [재생 수, 고유번호]를 리스트로 더해준다.
for i, genre in enumerate(genres) :
dic_lst[genre].append([plays[i], i])
dic_n[genre] += plays[i]
# arr 리스트에 [총 재생 수, 장르]를 가장 많이 재생된 순서대로 저장해준다.
for key in dic_n :
arr.append([dic_n[key], key])
arr.sort(reverse = True)
#모든 장르에 대하여 가장 많이 재생된 순서로(arr) 고유번호는 낮은 순대로, 재생수는 높은 순대로 최대 2곡까지 고유번호를 answer에 담는다.
for g in arr :
genre = g[1]
temp = sorted(dic_lst[genre], key = lambda x: (-x[0], x[1]))
for song in temp[:2] :
answer.append(song[1])
return answer