-
[🥲 프로그래머스] 베스트앨범 - hashAlgorithm/1일 1코테 2021. 7. 24. 16:06반응형
https://programmers.co.kr/learn/courses/30/lessons/42579
코딩테스트 연습 - 베스트앨범
스트리밍 사이트에서 장르 별로 가장 많이 재생된 노래를 두 개씩 모아 베스트 앨범을 출시하려 합니다. 노래는 고유 번호로 구분하며, 노래를 수록하는 기준은 다음과 같습니다. 속한 노래가
programmers.co.kr
✅ 내가 시도한 풀이
# 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