프로그래머스 고득점kit 베스트앨범 | Python
🔎 문제 설명
💚 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).