오구.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를 사용하여 역순 정렬을 해주도록 하자!

반응형
댓글수2