Posts [알고리즘] 프로그래머스 - 베스트앨범
Post
Cancel

[알고리즘] 프로그래머스 - 베스트앨범


문제

베스트앨범


접근

해시 문제이다.

우선 장르별 재생횟수를 통합해주는 딕셔너리 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


This post is licensed under CC BY 4.0 by the author.