문제 풀이
from collections import defaultdict
def solution(genres, plays):
answer = []
# int값을 value로 가진 딕셔너리 생성
play_count_by_genre = defaultdict(int)
# list를 value로 가진 딕셔너리 생성
songs_in_genre = defaultdict(list)
# 고유번호 생성
index = [i for i in range(len(genres))]
for song_id, genre, play in zip(index, genres, plays):
# 가장 많이 재생된 장르를 찾기 위해 각 장르가 몇번 재생되었는지 체크
play_count_by_genre[genre] += play
# 해당 장르에 각 고유번호와 재생횟수를 추가. 재생횟수에 -를 넣는 이유는 정렬시 한 번에 하기 위함
songs_in_genre[genre].append((-play, song_id))
# 가장 많이 재생된 장르 리스트의 '키(장르)'를 가져와서 그의 '값(재생횟수)'을 확인하고 가장 많은 순(내림차순)으로 정렬
genre_in_order = sorted(play_count_by_genre.keys(), key=lambda g: play_count_by_genre[g], reverse=True)
# 튜플을 해체(extend)하여 고유번호를 가져옴. 위에서 -play를 썼기 때문에 정렬 시 가장 많이 재생된 노래가 가장 앞에 오게 된다
for genre in genre_in_order:
answer.extend([song_id for minus_play, song_id in sorted(songs_in_genre[genre])[:2]])
return answer
문제 링크
programmers.co.kr/learn/courses/30/lessons/42579
코딩테스트 연습 - 베스트앨범
스트리밍 사이트에서 장르 별로 가장 많이 재생된 노래를 두 개씩 모아 베스트 앨범을 출시하려 합니다. 노래는 고유 번호로 구분하며, 노래를 수록하는 기준은 다음과 같습니다. 속한 노래가
programmers.co.kr
'Python > 프로그래머스' 카테고리의 다른 글
[프로그래머스] [Python] 기능 개발 (0) | 2020.11.23 |
---|---|
[프로그래머스] [Python] 주식가격 (0) | 2020.11.19 |
[프로그래머스] [Python] 위장 (0) | 2020.11.19 |
[프로그래머스] [Python] 전화번호 목록 (0) | 2020.11.18 |
[프로그래머스][Python] 완주하지 못한 선수 (0) | 2020.11.18 |