프로그래머스_베스트앨범_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