문제
접근
해시 문제이다.
우선 장르별 재생횟수를 통합해주는 딕셔너리 gen_cnt를 만들자.
gen_cnt는 각 장르 이름을 key로 가지며, 재생횟수를 value로 가진다.
재생횟수로 정렬해서 어떤 장르를 먼저 뽑을지 만들어놓는다.
gen_rank에 정렬된 딕셔너리가 담기며,
이제 이를 바탕으로 각 장르별로 노래와 트랙을 리스트로 넣어준다.
특정 장르의 리스트를 가져와서 정렬해준다.
그리고 상위에 2개 혹은 노래가 한개뿐이라면 1개를 정답에 담아준다.
코드
- 파이썬 코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
import operator
def solution(genres, plays):
answer = []
gen_cnt = dict()
gen_play = dict()
for genre, play in zip(genres, plays):
gen_cnt[genre] = gen_cnt.get(genre, 0) + play
gen_rank = sorted(gen_cnt.items(), key=operator.itemgetter(1), reverse=True)
for i in range(len(genres)):
if not genres[i] in gen_play:
gen_play[genres[i]] = []
gen_play[genres[i]].append((plays[i], i))
for gen in gen_rank:
item = sorted(gen_play[gen[0]], key = lambda x: (-x[0], x[1]))
if len(item) > 1:
answer.append(item[0][1])
answer.append(item[1][1])
else:
answer.append(item[0][1])
return answer