프로그래밍 공부/프로그래머스
[Python] 베스트앨범
오구.cpp
2022. 12. 22. 00:01
반응형
[코딩테스트 고득점KIT - 해시]

from collections import defaultdict
def solution(genres, plays):
answer = []
# 장르, 재생 횟수 딕셔너리 생성 및 초기화
play_dict = defaultdict(int)
genre_dict = defaultdict(list)
# 장르, 재생 횟수 딕셔너리 값 추가
for idx in range(len(genres)):
play_dict[genres[idx]] += plays[idx]
genre_dict[genres[idx]].append(plays[idx])
# 재생 횟수의 합 딕셔너리 내림차순 정렬 후,
# 재생 횟수가 가장 높은 장르부터 장르 딕셔너리에 대입하여 재생 횟수를 내림차순으로 저장한다.
# 만일 재생 횟수가 하나라면, 하나 2개 이상이라면 2개까지만 리스트에 넣는다.
total = [sorted(genre_dict[item[0]],reverse=True)[:2] if len(genre_dict[item[0]]) >=2 else sorted(genre_dict[item[0]],reverse=True) for item in sorted(play_dict.items(),key = lambda item:item[1],reverse=True)]
# 장르별 재생 횟수가 높은 2가지의 인덱스를 구한다.
# 재생 횟수가 같을 경우 고유번호 순서대로 return
for gen in total:
for idx in gen:
if plays.index(idx) in answer:
answer.append(plays.index(idx,plays.index(idx)+1,len(plays)))
else:
answer.append(plays.index(idx))
return answer
재생 횟수의 합 딕셔너리를 내림차순으로 정렬을 해주지 않아,
테스트 케이스는 통과하지만 제출 케이스에선 대부분 실패로 떴다.
딕셔너리에 있는 리스트 값을 정렬해줄 땐,
key를 사용하여 역순 정렬을 해주도록 하자!
반응형