** 알고리즘 오답노트 09

박경준·2021년 6월 15일
0

알고리즘 문제풀이

목록 보기
10/24

멜론 베스트 앨범 뽑기

  • 각 장르 별 재생 수 총합을 담은 딕셔너리 1개, 각 장르 별 [인덱스, 재생 수] 를 리스트로 담은 딕셔너리 1개, 총 두 개의 딕셔너리를 구성해야함.
  • 딕셔너리에서 value를 이용한 정렬, 여러 리스트 간 특정 인덱스(1)를 이용한 정렬은 sorted 함수와 lambda식을 이용한다.
genres = ["hiphop", "classic", "pop", "classic", "classic", "pop", "hiphop"]
plays = [2000, 500, 600, 150, 800, 2500, 2000]

def get_melon_best_album(genre_array, play_array):
  sum_dict = {}
  music_dict = {}
  result = []
  for i in range(len(genre_array)):
    if genre_array[i] not in sum_dict:
      sum_dict[genre_array[i]] = play_array[i]
      music_dict[genre_array[i]] = [[i, play_array[i]]]
    else:
      sum_dict[genre_array[i]] += play_array[i]
      music_dict[genre_array[i]].append([i, play_array[i]])
    
    
  sum_dict = sorted(sum_dict, key= lambda x : sum_dict[x], reverse=True)
  # 딕셔너리 소팅의 기본은 키값이므로 lambda를 이용해 소팅 기준을 sum_dict[x], 즉 value로 변경시켜준다.
  for i in sum_dict:
    music_dict[i] = sorted(music_dict[i], key=lambda x:x[1], reverse=True)
    # 배열 간의 비교에서 몇번째 인덱스를 비교할것인지에 대해 lambda를 이용해 소팅 기준을 1번 인덱스로 정해준다.
    for j in range(len(music_dict[i])):
      if j > 1:
        break
      result.append(music_dict[i][j][0])
  return result

print(get_melon_best_album(genres, plays))
profile
빠굥

0개의 댓글