code review/sort
[python] 프로그래머스 42579번 : 베스트 앨범
jmHan
2021. 12. 29. 14:18
반응형
https://programmers.co.kr/learn/courses/30/lessons/42579
코딩테스트 연습 - 베스트앨범
스트리밍 사이트에서 장르 별로 가장 많이 재생된 노래를 두 개씩 모아 베스트 앨범을 출시하려 합니다. 노래는 고유 번호로 구분하며, 노래를 수록하는 기준은 다음과 같습니다. 속한 노래가
programmers.co.kr
1. 성공한 코드
def solution(genres, plays):
answer = []
# 장르별 고유번호:재생횟수를 담음
dic = {}
n = len(genres)
for i in range(n):
genre = genres[i]
if genre in dic.keys():
dic[genre][i] = plays[i]
else:
dic[genre] = {i: plays[i]}
# 총 재생횟수가 많은 순으로 (k:v) 정렬
dic = dict(sorted(dic.items(), key=lambda x:(-sum(x[1].values()))))
for k, valueDic in dic.items():
# 장르별 곡 재생 횟수를 내림차순으로 정렬
valueDic = dict(sorted(valueDic.items(), key=lambda x:-x[1]))
dic[k] = valueDic
# print(dic)
# 장르별 상위 2곡만 추출
for valueDic in dic.values():
i = 0
for k in valueDic.keys():
answer.append(k)
i += 1
if i == 2:
break
return answer
2. 코드 개선
from collections import defaultdict
def solution(genres, plays):
answer = []
# 장르별 고유번호:재생횟수를 담음
dic = defaultdict(dict)
n = len(genres)
for i, genre in enumerate(genres):
dic[genre][i] = plays[i]
# print(dic)
# 총 재생횟수가 많은 순으로 (k:v) 정렬
dic = dict(sorted(dic.items(), key=lambda x:(-sum(x[1].values()))))
for k, valueDic in dic.items():
# 장르별 곡 재생 횟수를 내림차순으로 정렬
dic[k] = dict(sorted(valueDic.items(), key=lambda x:-x[1]))
# print(dic)
# 장르별 상위 2곡만 추출
for valueDic in dic.values():
for idx, k in enumerate(valueDic.keys()):
answer.append(k)
if idx == 1:
break
# print(answer)
return answer
반응형