티스토리 뷰

문제풀이

프로그래머스 베스트앨범 (hash) lv3

수박수박좋다 2021. 9. 15. 19:11
반응형

문제출처

 

생각

장르당 최대 2개의 노래를 answer에 담아서 반환하는 문제
담길 조건은 첫째, 해당 특정 장르의 노래의 재생수가 가장 높은 장르의 노래를 두개 담음
둘째, 해당 장르에서도 먼저 높은 재생수의 노래가 먼저 담김
장르별 최대 두개까지만 담길 수 있음

먼저 최대재생수의 장르를 찾기위해 반복문을 통해 장르별 재생수를 구했고
그 다음 재생수를 기준으로 내림차 정렬했다.
이후, 장르별 재생수가 높은 순서대로 dic를 만들었다.

그러면 재생수가 높은 장르 순대로 반복을 시켜서 해당 장르에 해당하는 노래 index를 참조해 정답배열에 넣으면 된다.
장르별 노래의 최대 카운트가 2이므로 cnt를 두는 조건을 추가

풀이

def solution(genres, plays):
    answer = []
    genre_dic = {}
    plays_dic = {}
    for i in range(0, len(genres)):
        if (genres[i] not in genre_dic):
            genre_dic[genres[i]] = 0
        genre_dic[genres[i]] += plays[i]
        if (i not in plays_dic):
            plays_dic[i] = 0
        plays_dic[i] = plays[i]
    sorted_genre_dic = dict(sorted(genre_dic.items(), key=lambda x : x[1], reverse=True))
    sorted_plays_dic = dict(sorted(plays_dic.items(), key=lambda x : x[1], reverse=True))
    for genre in sorted_genre_dic:
        cnt = 0
        for i in sorted_plays_dic:
            if genre == genres[i] and sorted_plays_dic[i] != -1 and cnt != 2:
                answer.append(i)
                sorted_plays_dic[i] = -1
                cnt += 1                

    return answer
반응형
댓글
반응형
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
농담곰의 고군분투 개발기