본문 바로가기
Algorithm/해시

[프로그래머스 lv 3] 베스트앨범

by HANNI하니 2023. 12. 4.

사용 언어 - Python3

문제 - 베스트앨범

https://school.programmers.co.kr/learn/courses/30/lessons/42579

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

정답

hash 사용하기

1. 딕셔너리 생성

dic1 각 장르별 인덱스와 재생수 dic1[g] = [(i,p)]

dic2 각 장르별 재생횟수 총합 dic2[g] += p

 

2. 정렬

dic2의 장르별 총 재생 횟수가 많은 순서대로 내림차순 정렬

> dic1[k] 해당 장르에서 가장 많이 재생된 순서대로 내림차순 정렬 -> [:2] 두곡만

index를 answer에 저장후 return

 

def solution(genres, plays):
    answer = []
    dic1 = {}
    dic2 = {}
    
    for i, (g,p) in enumerate(zip(genres, plays)):
        # 장르별 index, players 수
        if g not in dic1:
            dic1[g] = [(i,p)]
        else:
            dic1[g].append((i,p))
        
        # 장르별 재생횟수 총합 구하기
        if g not in dic2:
            dic2[g] = p
        else:
            dic2[g] += p
    
    # 장르별 총 재생 횟수(v)를 기준으로 dic2 내림차순 
    for (k,v) in sorted(dic2.items(), key = lambda x:x[1], reverse=True):
        # 같은 장르(k)에서 가장 많이 재생된 노래 2곡 dic1 [:2]
        for (i,p) in sorted(dic1[k], key = lambda x:x[1], reverse=True)[:2]:
            answer.append(i)
    
    return answer

 

 

 

 

레퍼런스

정답 깃허브

댓글