알고리즘/programmers
[ programmers ] 베스트앨범 42579번 ( python )
Yanoo
2021. 8. 21. 01:04
728x90
반응형
문제
프로그래머스 42579번 베스트앨범 풀이 ( 파이썬 )
https://programmers.co.kr/learn/courses/30/lessons/42579
코딩테스트 연습 - 베스트앨범
스트리밍 사이트에서 장르 별로 가장 많이 재생된 노래를 두 개씩 모아 베스트 앨범을 출시하려 합니다. 노래는 고유 번호로 구분하며, 노래를 수록하는 기준은 다음과 같습니다. 속한 노래가
programmers.co.kr
풀이
재생된 수와 고유번호가 담긴 dict과 각 장르의 합을 저장하는 dict을 나누었다.
먼저 장르의 합을 저장하는 dict을 내림차순으로 정렬한 후 이 순서대로 탐색을 시작한다.
genres_sum = sorted(genres_sum.items(), key = lambda x:x[1], reverse = True)
탐색을 시작하기 전에 재생된 수와 고유번호를 담은 dict을 첫 번째 인덱스(재생된 수)는 내림차순, 두 번째 인덱스(고유번호)는 오름차순으로 정렬해야 한다.
for key in genres_dict.keys():
genres_dict[key].sort(key = lambda x:(-x[0], x[1]))
이제 전체 코드를 보면 마지막은 장르가 2개 이상일 때와 1개일 때로 구분해서 answer라는 리스트에 넣으면 된다.
def solution(genres, plays):
answer = []
genres_dict = dict()
genres_sum = dict()
for i in range(len(genres)):
genres_dict[genres[i]] = genres_dict.get(genres[i], []) + [(plays[i], i)]
genres_sum[genres[i]] = genres_sum.get(genres[i], 0) + plays[i]
genres_sum = sorted(genres_sum.items(), key = lambda x:x[1], reverse = True)
for key in genres_dict.keys():
genres_dict[key].sort(key = lambda x:(-x[0], x[1]))
for genre in genres_sum:
if len(genres_dict[genre[0]]) > 1:
for i in range(2):
cnt, idx = genres_dict[genre[0]][i]
answer.append(idx)
else:
cnt, idx = genres_dict[genre[0]][0]
answer.append(idx)
return answer
728x90
반응형