문제
- 앨범에 들어갈 노래의 고유 번호 순서대로 정렬하기
- 속한 노래가 많이 재생된 장르 -> 많이 재생된 노래 -> 고유 번호가 낮은 노래 먼저 수록
- 장르 별로 가장 많이 재생된 노래를 최대 2개 까지만 넣는다.
풀이
- 장르별로 노래를 모은 후, 개수로 정렬한다.
- 장르별 노래를 (재생 횟수 순서, 고유 번호) 순으로 정렬한다.
- 최대 2개까지 노래를 추가한다.
from collections import defaultdict
def solution(genres, plays):
songs = defaultdict(list) # 장르별 노래 리스트
gen_cnt = defaultdict(int) # 장르별 전체 재생 횟수
for i, (gen, play) in enumerate(zip(genres, plays)):
songs[gen].append((i, play)) # 장르별로 (고유번호, 재생횟수) 저장
gen_cnt[gen] += play # 장르별 전체 재생 횟수
answer = [] # 정답 배열
# 많이 재생된 장르 순서대로
for gen in sorted(gen_cnt, key=lambda x: -gen_cnt[x]):
# 각 장르의 노래를 재생 많이 한 횟수 -> 고유 번호 낮은 순으로 정렬
songs[gen] = sorted(songs[gen], key=lambda x:(-x[1], x[0]))
answer.append(songs[gen][0][0]) # 첫 번째 곡 추가
if len(songs[gen]) > 1: # 두 번째 곡 추가
answer.append(songs[gen][1][0])
return answer
References