베스트앨범 [해시(Hash)]
코딩테스트 연습 > 해시 > 베스트앨범
https://programmers.co.kr/learn/courses/30/lessons/42579
# 입력값
genres= ["classic", "pop", "classic", "classic", "pop"]
plays = [500, 600, 150, 800, 2500]
# 01 play의 고유번호 생성을 위한 enumerate
label = []
for i,p in enumerate(plays):
label.append([p,i])
# 02 genres 계산을 위한 딕셔너리 구성
dic = dict() # 장르에 따른 딕셔너리(장르: 곡[재생횟수,고유번호])
title = dict() # 가장 많이 재생된 장르 확인을 위한 딕셔너리(장르: 총 재생횟수)
for g,l in zip(genres,label):
if g in dic:
dic[g]+=[l]
title[g]+=l[0]
else:
dic[g]=[l]
title[g]=l[0]
title = sorted(title.items(),key=lambda x:x[1],reverse=True) # 많이 재생된 장르부터 정렬
#03
answer = []
for g,p in title: #많이 재생 된 장르부터
dic[g] = sorted(dic[g],key=lambda x: (-x[0],x[1])) # 해당 장르를 재생횟수, 고유번호를 기준으로 정렬
answer += [i for p,i in dic[g][:2]] #정렬된 장르의 0,1번째 원소의 고유번호를 answer값에 추가
answer
def solution(genres, plays):
#01 plays의 고유번호 생성을 위해 enumerate를 사용하여 list[i,v] 생성
label = []
for i,p in enumerate(plays):
label.append([p,i])
#02
dic = dict()
title = dict()
for g,l in zip(genres,label):
if g in dic:
dic[g]+=[l]
title[g]+=l[0]
else:
dic[g]=[l]
title[g]=l[0]
title = sorted(title.items(),key=lambda x:x[1],reverse=True)
answer = []
for (g,p) in title:
dic[g] = sorted(dic[g],key=lambda x: (-x[0],x[1]))
answer += [i for (p, i) in dic[g][:2]]
return answer