프로그래머스 베스트앨범 코드 및 해설 (파이썬)
2021. 4. 27. 14:08ㆍalgorithm
반응형
programmers.co.kr/learn/courses/30/lessons/42579
💡 2개의 딕셔너리(장르별 총 재생횟수, 장르별 노래의 고유번호 및 해당 노래의 재생횟수)를 이용해 풀이했습니다.
song_dict[장르] = [노래의 고유 번호, 재생 횟수]들의 리스트
genre_dict[장르] = 해당 장르의 총 재생 횟수
이렇게 두 가지 딕셔너리를 만들어 풀이했습니다.
우선 song_dict의 각 장르 내에서 재생 횟수가 많은 순으로 정렬했고, genre_dict도 value를 큰 값부터 정렬하여 총 재생횟수가 많은 장르의 순서를 알아냈습니다.
이후 총 재생 횟수가 많은 장르부터 각 장르 내에서 재생 횟수가 많은 2개씩 뽑아 그 노래의 고유번호를 answer에 추가하여 풀이했습니다.
from collections import defaultdict
def solution(genres, plays):
answer = []
# song_dict[장르] = [노래의 고유 번호, 재생 횟수]들의 리스트
song_dict = defaultdict(list)
for i, (genre, play) in enumerate(zip(genres, plays)):
song_dict[genre].append([i, play])
# genre_dict[장르] = 해당 장르의 총 재생 횟수
genre_dict = {}
for genre in song_dict:
# album_dict의 각 장르 내에서 재생 횟수가 많은 순으로 정렬
song_dict[genre].sort(key=lambda x: x[1], reverse=True)
genre_dict[genre] = sum([song[1] for song in song_dict[genre]])
# 총 재생 횟수가 많은 장르대로 정렬
genre_dict = dict(sorted(genre_dict.items(), key=lambda item: item[1], reverse=True))
# 총 재생 횟수가 많은 장르부터
for genre in genre_dict:
# 각 장르 내에서 재생 횟수가 가장 많은 2개씩 뽑아 해당 노래의 고유번호를 answer에 추가
answer += [song[0] for song in song_dict[genre][:2]]
return answer
반응형
'algorithm' 카테고리의 다른 글
프로그래머스 타겟 넘버 코드 및 해설 (파이썬) (0) | 2021.06.01 |
---|---|
프로그래머스 여행경로 코드 및 해설 (파이썬) (0) | 2021.04.29 |
프로그래머스 영어 끝말잇기 코드 및 해설 (파이썬) (0) | 2021.04.26 |
프로그래머스 괄호 회전하기 코드 및 해설 (파이썬) (0) | 2021.04.26 |
프로그래머스 더 맵게 코드 및 해설 (파이썬) (0) | 2021.04.25 |