해시 | 프로그래머스 고득점kit 베스트앨범 | Python

Table of Contents


프로그래머스 고득점kit 베스트앨범 | Python

📌 프로그래머스 고득점kit 베스트앨범 문제 바로가기


🔎 문제 설명

💚 Level 3

- 난이도 ★☆☆☆
- 해시

어렵지 않은 유형이나 딕셔너리 정렬법을 알고 있지 않다면 못 푸는 문제이다. 장르별로 재생횟수 총합 딕셔너리 total_play_dict 와 장르별 고유번호 + 재생횟수를 저장한 lst_play_dict 를 이용해 풀이하였다.

해시의 장단점

해시는 자료의 검색, 읽기, 저장 속도가 빠르다는 장점이 있다. 그리고 중복 여부를 한 번에 판별하기 쉽다.
반면, 저장 공간을 더 많이 필요로 하고 key가 달라도 해시 값이 같을 경우 충돌이 발생한다는 단점이 있다. 파이썬은 이를 개방 주소법, 충돌할 때 다음 빈자리를 찾아 자료를 저장한다고 한다.



💻 내 코드

from collections import defaultdict

def solution(genres, plays):
    answer = []
    
    # 가장 많은 장르 > 가장 많은 노래 > 낮은 고유 번호
    total_play_dict = defaultdict(int)
    lst_play_dict = defaultdict(list)
    for idx, (genre, play) in enumerate(zip(genres, plays)):
        total_play_dict[genre] += play
        lst_play_dict[genre].append((idx, play))
    total_play_dict = sorted(total_play_dict.items(), key=lambda x: -x[1])

    for genre,_ in total_play_dict:
        playlist = lst_play_dict[genre]
        playlist = sorted(playlist, key=lambda x: (-x[1], x[0]))
        cnt = 0
        for idx, play in playlist:
            if cnt == 2:
                break
            answer.append(idx)
            cnt += 1
    return answer




 


💙 You need to log in to GitHub to write comments. 💙
If you can't see comments, please refresh page(F5).