Skip to content

Instantly share code, notes, and snippets.

@shoark7
Created October 8, 2019 02:14
Show Gist options
  • Save shoark7/edfc9e8c5e3336a78eaaeacb37a9568f to your computer and use it in GitHub Desktop.
Save shoark7/edfc9e8c5e3336a78eaaeacb37a9568f to your computer and use it in GitHub Desktop.
프로그래머스 - 해시 - 베스트앨범 문제
class Song:
def __init__(self, number, play):
self.number = number
self.play = play
class Genre:
def __init__(self, name):
self.name = name
self.song_list = [] # (song_index, its_played_count)
self.total_played = 0
def solution(genres, plays):
SONGS_PER_GENRE = 2
genre_used = {}
ans = []
for i, g, p in zip(range(len(plays)), genres, plays):
genre_used[g] = genre_used.get(g) or Genre(g)
genre = genre_used[g]
genre.total_played += p
song = Song(i, p)
genre.song_list.append(song)
genre_list = list(v for k, v in genre_used.items())
# 1. 정렬 기준: 장르 총 재생 횟수 기준 내림차순
genre_list.sort(key=lambda x: x.total_played, reverse=True)
# 2. 정렬 기준: 장르 내 재생 횟수 내림차순 및 노래 번호 오름차순
for genre in genre_list:
genre.song_list.sort(key=lambda x: (-x.play, x.number))
ans.extend(
song.number for song in genre.song_list[:SONGS_PER_GENRE]
)
return ans
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment