Algorithm/1일 1코테
[🥲 프로그래머스] 베스트앨범 - hash
대인보우
2021. 7. 24. 16:06
반응형
https://programmers.co.kr/learn/courses/30/lessons/42579
✅ 내가 시도한 풀이
# 84점으로 광탈ㅠ
def solution(genres, plays):
music_list = {}
idx = 0
for g, p in zip(genres, plays): # 각 카테고리마다 [고유번호, 플레이횟수] 순으로 넣어준다.
if g not in music_list:
music_list[g] = []
music_list[g].append([idx, p])
else:
music_list[g].append([idx, p])
music_list[g].sort(key = lambda x:(x[1],x[0])) # 플레이횟수 -> 고유번호 순으로 정렬
idx += 1
# 각 카테고리별로 합계를 구해준다.
sum_list = {}
for category in music_list:
for music in music_list[category]:
if category not in sum_list:
sum_list[category] = music[1]
else:
sum_list[category] += music[1]
answer = []
# 가장 많이 플레이 된 카테고리 -> 카테고리에서 가장 많이 플레이된 노래 순으로 넣어준다.
while sum_list:
max_category = max(sum_list.keys(), key=lambda k : sum_list[k])
for music in music_list[max_category][-1:-3:-1]:
answer.append(music[0]) # 고유번호
del(sum_list[max_category])
return answer
✅ 다른사람 풀이
from collections import defaultdict
def solution(genres, plays):
play_count_by_genre = defaultdict(int)
songs_in_genre = defaultdict(list)
for song_id, genre, play in zip(counter(), genres, plays):
play_count_by_genre[genre] += play # 장르별 횟수
songs_in_genre[genre].append((-play, song_id)) # 아이디와 노래 횟수
genre_in_order = sorted(play_count_by_genre.keys(), key=lambda g:play_count_by_genre[g], reverse=True)
answer = list()
for genre in genre_in_order:
answer.extend([ song_id for minus_play, song_id in sorted(songs_in_genre[genre])[:2]])
return answer
# id 생성
def counter():
i = 0
while True:
yield i
i += 1
깔끔쓰...
저렇게 풀고 싶었는데 못품!!!!!!
반응형