📖 해시 > 베스트앨범

  • 베스트 앨범에 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

  1. lambda 정렬 식 헷갈리던 것이 정리되었다
  2. dict의 value가 list일 때 그 value(list)를 정렬하고 싶다면??? → key로 접근해서 그 key의 value를 정렬해야 함 sorted(dict[key]) 이렇게 정렬하기

📖관련 지식

📎Hash Table

📎Dictionary

📎lambda