프로그래머스_베스트앨범_python
2021. 7. 21. 00:09ㆍ코딩테스트
반응형
https://programmers.co.kr/learn/courses/30/lessons/42579
코딩테스트 연습 - 베스트앨범
스트리밍 사이트에서 장르 별로 가장 많이 재생된 노래를 두 개씩 모아 베스트 앨범을 출시하려 합니다. 노래는 고유 번호로 구분하며, 노래를 수록하는 기준은 다음과 같습니다. 속한 노래가
programmers.co.kr
from collections import defaultdict
def solution(genres, plays):
answer = []
play_cnt = defaultdict(int)
list_cnt = defaultdict(list)
for i in range(len(genres)):
play_cnt[genres[i]] += plays[i]
list_cnt[genres[i]].append((-plays[i], i))
order_g = sorted(play_cnt.keys(), key=lambda x:play_cnt[x], reverse=True)
for g in order_g:
answer.extend([i for p, i in sorted(list_cnt[g])][:2])
return answer
[내코드]
sorted(list, key, reverse)
[:2] 2개씩만 가져옴
def solution(genres, plays):
answer = []
d = {e:[] for e in set(genres)}
for e in zip(genres, plays, range(len(plays))):
d[e[0]].append([e[1] , e[2]])
genreSort =sorted(list(d.keys()), key= lambda x: sum( map(lambda y: y[0],d[x])), reverse = True)
for g in genreSort:
temp = [e[1] for e in sorted(d[g],key= lambda x: (x[0], -x[1]), reverse = True)]
answer += temp[:min(len(temp),2)]
return answer
[다른사람코드]
d={e:[] for e in set(genres)} //{'pop': [], 'classic': []}
for e in zip(genres, plays, range(len(plays))): // print(e) ('classic', 500, 0) (장르,재생수,인덱스)
d //{'classic': [[500, 0], [150, 2], [800, 3]], 'pop': [[600, 1], [2500, 4]]}
genreSort //['pop', 'classic']
반응형
'코딩테스트' 카테고리의 다른 글
프로그래머스_프린터_python (0) | 2021.07.25 |
---|---|
프로그래머스_기능개발_python (0) | 2021.07.25 |
프로그래머스_위장_python (0) | 2021.07.20 |
프로그래머스_전화번호 목록_python (0) | 2021.07.18 |
해시란? (0) | 2021.07.18 |