문제링크: 베스트앨범
✍🏻 Information
| content | |
|---|---|
| 언어 | python |
| 난이도 | ⭐️⭐️⭐️ |
| 풀이시간 | 60분? |
| 제출횟수 | ∞ |
| 인터넷검색유무 | yes |
🍒 My Code
def solution(genres, plays):
answer = []
song = {} #key:장르, value:(고유번호,재생된횟수)
sum_song = {} #key:장르 총 재생횟수, value:(고유번호,재생된횟수)
#song dictionary 초기화
for i in range(len(genres)):
if genres[i] not in song:
song[genres[i]]=[(i,plays[i])]
else:
song[genres[i]].append((i,plays[i]))
for i in song.values():
#재생된 횟수를 기준으로 sorting. (고유번호,재생횟수)로 담겨있음.
k = sorted(i,key=lambda x: x[1],reverse=True)
#key는 해당 장르의 총 재생횟수, value는 해당 장르에서 재생횟수가 가장 높은 2개
sum_song[sum([j[1] for j in k])]= k[:2] #상위 2개만 뽑음
#장르 총 재생횟수 높은 순으로 sorting
sum_song = dict(sorted(sum_song.items(),reverse=True))
#고유번호만 뽑아서 answer에 append
for i in sum_song.values():
for j in i:
answer.append(j[0])
return answer
💡 What I learned
key 기준으로 오름차순 정렬: dict(sorted(dic.items()))value 기준으로 오름차순 정렬: dict(sorted(dic.items(), key=lambda x:x[1]))def solution(genres, plays):
answer = []
dic1 = {}
dic2 = {}
for i, (g, p) in enumerate(zip(genres, plays)):
if g not in dic1:
dic1[g] = [(i, p)]
else:
dic1[g].append((i, p))
if g not in dic2:
dic2[g] = p
else:
dic2[g] += p
for (k, v) in sorted(dic2.items(), key=lambda x:x[1], reverse=True):
for (i, p) in sorted(dic1[k], key=lambda x:x[1], reverse=True)[:2]:
answer.append(i)
return answer