나의 풀이
def solution(genres, plays):
playlist = {}
count = {}
for idx, (g, p) in enumerate(zip(genres, plays)):
if g in playlist:
playlist[g].append((p,idx))
count[g] += p
else:
playlist[g] = [(p,idx)]
count[g] = p
ans = []
for g in sorted(count.items(), reverse=True, key=lambda x:x[1]):
for p in sorted(playlist[g[0]], reverse=True, key=lambda x:x[0])[:2]:
ans.append(p[1])
return ans
고수의 풀이
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
CODE REVIEW
- 멜x, 벅x, 스x티파이와 같은 음원 프로그램에서 쓸 법한 정렬 문제. 총 재생수로
genres
를 정렬한 후에, 그 장르별로 많이 재생한 2개의 항목의 번호를 출력해야했다. - 코드의 큰 구조는
1) genres, plays를 묶어서 dict로 만드는 과정
과2) 앞에서 생성한 dict을 알맞게 정렬하는 과정
로 구성된다. - dict를 정렬할 떄에는 sort를 사용하지 못하고
sorted()
로 묶어서 사용해야한다. - 비슷한 논리지만 다른 형태인 고수의 풀이도 참고하자!