-
[🥲 프로그래머스] 베스트앨범 - hashAlgorithm/1일 1코테 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
깔끔쓰...
저렇게 풀고 싶었는데 못품!!!!!!
반응형'Algorithm > 1일 1코테' 카테고리의 다른 글
[🥲 프로그래머스] 큰 수 만들기 - 탐욕법 (0) 2021.07.25 [??? 프로그래머스] 조이스틱 - 탐욕법 (0) 2021.07.25 [🥲 프로그래머스] 위장 - hash (0) 2021.07.23 [🥲 프로그래머스] 전화번호 목록 - hash (0) 2021.07.22 [😍 프로그래머스] 완주하지 못한 선수 - hash (0) 2021.07.22