DevKim

[Python] 프로그래머스 LV.03 - 베스트 앨범 본문

알고리즘 PS

[Python] 프로그래머스 LV.03 - 베스트 앨범

on_doing 2021. 3. 13. 18:01
728x90

programmers.co.kr/learn/courses/30/lessons/42579

 

코딩테스트 연습 - 베스트앨범

스트리밍 사이트에서 장르 별로 가장 많이 재생된 노래를 두 개씩 모아 베스트 앨범을 출시하려 합니다. 노래는 고유 번호로 구분하며, 노래를 수록하는 기준은 다음과 같습니다. 속한 노래가

programmers.co.kr

[ 알고리즘 / 자료구조 ]

해시

 

[문제 접근]

defaultdict으로 list 형태의 딕셔너리를 생성해주고, 제한 사항에 맞춰 하나씩 정렬해주고 조건을 달아주면 된다

 

 

[코드]

from collections import defaultdict

def solution(genres, plays):
    answer = []
    dic=defaultdict(list)
    max_g=defaultdict(int)
    
    # dic 배열 먼저 만들기
    for i in range(len(genres)):
        g=genres[i]
        p=plays[i]
        dic[g].append((p,i)) #play 수와 고유번호
    
    #최대인 장르 순서대로 넣기
    for i in range(len(genres)):
        g=genres[i]
        p=plays[i]
        max_g[g]+=p
        
    #총 곡수가 많은 순서대로 정렬
    max_g=sorted(max_g.items(),key=lambda x:x[1],reverse=True)
    
    
    for g in max_g:
        cnt=0
        ptr=g[0]
        p=dic.pop(ptr) #해당 value 값 반환
        p=sorted(p,key=lambda x:x[0],reverse=True)
        for play in p:
            answer.append(play[1])
            cnt+=1
            if cnt==2:
                break

    
    return answer
728x90
Comments