KEEP GOING
[python] 프로그래머스 42579번 : 베스트 앨범 본문
반응형
https://programmers.co.kr/learn/courses/30/lessons/42579
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
반응형
'code review > sort' 카테고리의 다른 글
[python] 프로그래머스 42889번 : 실패율 (정렬, ZeroDivisionError) (0) | 2022.01.11 |
---|---|
[python] 이것이코딩테스트다 : 커리큘럼 (위상정렬) (0) | 2022.01.10 |
[python] 딕셔너리 정렬하기 (key/value 기준으로 sorted(), lambda, reverse 사용) (2) | 2021.12.28 |
[python] 프로그래머스 42746번 : 가장 큰 수 (0) | 2021.12.27 |
백준 1181번 : 단어 정렬 (list(set()) 처리) (0) | 2021.11.10 |
Comments