[ Programmers 1012 ] 베스트 앨범(Python)
문제
https://programmers.co.kr/learn/courses/30/lessons/42579
장르 별로 가장 많이 재생된 노래를 2개씩 출력해야 한다!
문제 풀이
- 정렬 기준
장르에 노래가 많은 순 > 장르 내에서 많이 들은 노래 순 > 고유번호가 낮은 순
0. 입력 받기
from collections import defaultdict
def solution(genres, plays):
s_genre = defaultdict(list)
s_play = defaultdict(int)
for i in range(len(genres)):
s_genre[genres[i]].append((i,plays[i]))
s_play[genres[i]] += plays[i]
s_genre
에는 고유번호와 노래 재생 횟수,
s_play
는 장르를 키 값으로 갖게 해서 장르 별로 노래 횟수를 더해주었다.
1. s_play
많이 재생된 장르 순으로 정렬하기
s_play = sorted(s_play.items(), key = lambda x: x[1], reverse = True)
lambda를 써서 정렬해주었다.
2. 많이 재생된 장르 순으로 노래 두가지 출력하기
answer = []
for play in s_play:
gen = play[0]
i = 0
for temp in sorted(s_genre[gen],
key = lambda x: x[1], reverse = True):
answer.append(temp[0])
i += 1
if i == 2:
break
return answer
s_genre도 노래 재생 횟수 > 고유 번호 순으로 정렬해주었다.
코드
from collections import defaultdict
def solution(genres, plays):
s_genre = defaultdict(list)
s_play = defaultdict(int)
for i in range(len(genres)):
s_genre[genres[i]].append((i,plays[i]))
s_play[genres[i]] += plays[i]
# print(s_genre)
# print(s_play)
s_play = sorted(s_play.items(), key = lambda x: x[1], reverse = True)
answer = []
for play in s_play:
gen = play[0]
i = 0
for temp in sorted(s_genre[gen], key = lambda x: x[1], reverse = True):
answer.append(temp[0])
i += 1
if i == 2:
break
return answer
Author And Source
이 문제에 관하여([ Programmers 1012 ] 베스트 앨범(Python)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@uoayop/Programmers-1012-베스트-앨범Python저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)