동캄의 코딩도장

프로그래머스 level3 [베스트앨범] 파이썬 본문

코테/프로그래머스

프로그래머스 level3 [베스트앨범] 파이썬

동 캄 2022. 4. 7. 17:06

https://programmers.co.kr/learn/courses/30/lessons/42579

 

코딩테스트 연습 - 베스트앨범

스트리밍 사이트에서 장르 별로 가장 많이 재생된 노래를 두 개씩 모아 베스트 앨범을 출시하려 합니다. 노래는 고유 번호로 구분하며, 노래를 수록하는 기준은 다음과 같습니다. 속한 노래가

programmers.co.kr

# 프로그래머스 베스트앨범

def solution(genres, plays):
    answer = []
    genre_ = set(genres)
    sum_play = {}
    lst = {}
    for genre in genre_:
        lst[genre] = []
        sum_play[genre] = 0
    for val in enumerate(zip(genres, plays)):
        lst[val[1][0]].append([val[0], val[1][1]])
        sum_play[val[1][0]] += val[1][1]
    sum_play = sorted(sum_play.items(), key=lambda x: -x[1])
    for genre in genre_:
        lst[genre] = sorted(lst[genre], key=lambda x: -x[1])
    for genre, S in sum_play:
        if len(lst[genre]) >= 2:
            answer.append(lst[genre][0][0])
            answer.append(lst[genre][1][0])
        elif len(lst[genre]) == 1:
            answer.append(lst[genre][0][0])
    return answer

먼저 genre의 종류를 genre_에 저정한 뒤, lst에 빈 배열을 생성하고, sum_play에 값을 0으로 초기화 해준다. 그 후에 sum_play에는 각 genre 별로 재생 횟수(play)를 더하고, lst의 각 배열에는 각 genre별 재생횟수를 저장한다.

그 뒤로 재생횟수의 합이 큰 장르를 기준으로 answer에 append 해준다.