베스트 앨범에 1.많이 재생된 장르 순 2.장르 내 많이 재생된 노래 순 3.고유번호(index)가 낮은 노래 순 으로 수록
한 장르 당 최대 2곡
📖What I thought
1번 기준을 위한 장르 dict {genre: playCnt}
2, 3번 기준을 위한 노래 dict {genre: [(songPlayCnt, songNum), …] }
→ 요 때, 각 value의 값(list)도 playCnt 기준으로 정렬
를 정렬해 베스트앨범에 차례로 수록하면 끄읏
📖풀이
📎Hash Table
def solution(genres, plays): best = [] # hash genres(genre: playCnt), songs(genre: [(songPlayCnt, songNum), ...])) gen_hs, song_hs = dict(), dict() for i, (g, p) in enumerate(zip(genres, plays)): gen_hs[g] = gen_hs.get(g, 0) + p if g not in song_hs: song_hs[g] = [(p, i)] else: song_hs[g].append((p, i)) # sort genres gen_hs = sorted(gen_hs.items(), key = lambda x: -x[1]) # best album for g, g_p in gen_hs: # sort songs songs = sorted(song_hs[g], key = lambda x: (-x[0], x[1])) # max 2 song per 1 genre if len(songs) == 1: best.append(songs[0][1]) else: for i in range(2): best.append(songs[i][1]) return best
해시 만들자
gen_hs : {genre: playCnt}
song_hs : {genre: [(songPlayCnt, songNum), …] }
gen_hs를 playCnt 내림차순으로 정렬하잣
song_hs의 value를 playCnt 내림차순, indx 오름차순으로 또 정렬해잇 → 볼 때마다 코드 보깅~ 기억해
베스트 앨범에 넣어버렷~~ 근데 장르 당 최대 2곡 씩인…
📖What I learned
lambda 정렬 식 헷갈리던 것이 정리되었다
dict의 value가 list일 때 그 value(list)를 정렬하고 싶다면???
→ key로 접근해서 그 key의 value를 정렬해야 함 sorted(dict[key]) 이렇게 정렬하기