[Level3] 베스트앨범
1865 단어 해시programmersprogrammers
🛠 문제
👩🏻💻 해결 방법
어려운 문제는 아니지만, 구현 과정에서 많이 헷갈리는 문제였다
딕셔너리에 저장할 때, genres_total_play와 genres_dict를 한 번에 저장할 수 있도록 생각하는 것이 필요했다...
장르 내에서 많이 재생된 노래를 먼저 수록하고(역순), 만약 장르 내에서 재생 횟수가 같은 노래 중에서는 고유 번호가 낮은 노래를 먼저 수록하기 위해 key = lambda x:(-x[0], x[1])을 사용하였다
소스 코드
def solution(genres, plays):
answer = []
genre_total_play = {}
genre_dict = {}
for i in range(len(genres)):
if genres[i] not in genre_total_play.keys():
genre_total_play[genres[i]] = plays[i]
genre_dict[genres[i]] = [(plays[i], i)]
else:
genre_total_play[genres[i]] += plays[i]
genre_dict[genres[i]].append((plays[i], i))
sorted_total_play = sorted(genre_total_play.items(), key = lambda x:x[1], reverse = True)
for i in sorted_total_play:
play_list = genre_dict[i[0]]
play_list = sorted(play_list, key = lambda x:(-x[0], x[1]))
for j in range(len(play_list)):
if j == 2:
break
answer.append(play_list[j][1])
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
Author And Source
이 문제에 관하여([Level3] 베스트앨범), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@hyunnn/Level3-베스트앨범저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)