https://programmers.co.kr/learn/courses/30/lessons/42579
문제는 따로 설명하지 않고, 링크를 첨부.
결국 필요한 요소는 앨범에 장르 순서를 정할 장르별 총합과 해당 장르에서 플레이수가 많은 두 곡이다.
고민한 요소,
dict를 key기준으로 sort를 어떻게 할 것인가? key:lambda x: x[1]
from _collections import defaultdict
def solution(genres, plays):
answer = []
idx_dict = defaultdict(lambda: [])
for i in range(len(genres)):
idx_dict[genres[i]] += [i]
total_dict = defaultdict(int)
for g, values in idx_dict.items():
for val in values:
total_dict[g] += plays[val]
total_dict = sorted(total_dict.items(), key=lambda x: x[1], reverse=True)
for g, value in total_dict:
temp = []
for val in idx_dict[g]:
temp.append([val,plays[val]])
temp = sorted(temp,key=lambda x:x[1], reverse=True)
for j in range(2):
if len(temp) == 1:
answer.append(temp[j][0])
break
answer.append(temp[j][0])
return answer
def solution(genres, plays):
answer = []
d = {e:[] for e in set(genres)}
for e in zip(genres, plays, range(len(plays))):
d[e[0]].append([e[1] , e[2]])
genreSort =sorted(list(d.keys()), key= lambda x: sum( map(lambda y: y[0],d[x])), reverse = True)
for g in genreSort:
temp = [e[1] for e in sorted(d[g],key= lambda x: (x[0], -x[1]), reverse = True)]
answer += temp[:min(len(temp),2)]
return answer
차이 : idx가 아닌 [장르, 플레이수] 기준으로 dict를 만들었고,
합을 key= lambda x: sum( map(lambda y: y[0],d[x]))
d[x] -> 장르,플레이수 -> 플레이수 sum 을 해서 찾음.