https://programmers.co.kr/learn/courses/30/lessons/42579
장르 별로 가장 많이 재생된 노래를 2개씩 출력해야 한다!
- 정렬 기준
장르에 노래가 많은 순 > 장르 내에서 많이 들은 노래 순 > 고유번호가 낮은 순
0. 입력 받기
from collections import defaultdict
def solution(genres, plays):
s_genre = defaultdict(list)
s_play = defaultdict(int)
for i in range(len(genres)):
s_genre[genres[i]].append((i,plays[i]))
s_play[genres[i]] += plays[i]
s_genre
에는 고유번호와 노래 재생 횟수,
s_play
는 장르를 키 값으로 갖게 해서 장르 별로 노래 횟수를 더해주었다.
1. s_play
많이 재생된 장르 순으로 정렬하기
s_play = sorted(s_play.items(), key = lambda x: x[1], reverse = True)
lambda를 써서 정렬해주었다.
2. 많이 재생된 장르 순으로 노래 두가지 출력하기
answer = []
for play in s_play:
gen = play[0]
i = 0
for temp in sorted(s_genre[gen],
key = lambda x: x[1], reverse = True):
answer.append(temp[0])
i += 1
if i == 2:
break
return answer
s_genre도 노래 재생 횟수 > 고유 번호 순으로 정렬해주었다.
from collections import defaultdict
def solution(genres, plays):
s_genre = defaultdict(list)
s_play = defaultdict(int)
for i in range(len(genres)):
s_genre[genres[i]].append((i,plays[i]))
s_play[genres[i]] += plays[i]
# print(s_genre)
# print(s_play)
s_play = sorted(s_play.items(), key = lambda x: x[1], reverse = True)
answer = []
for play in s_play:
gen = play[0]
i = 0
for temp in sorted(s_genre[gen], key = lambda x: x[1], reverse = True):
answer.append(temp[0])
i += 1
if i == 2:
break
return answer