오구의코딩모험

[Python] 베스트앨범 본문

프로그래밍 공부/프로그래머스

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

반응형

'프로그래밍 공부 > 프로그래머스' 카테고리의 다른 글

[Python] 같은 숫자는 싫어  (0) 2022.12.24
[Python] 위장  (0) 2022.12.23
[Python] 전화번호 목록  (0) 2022.12.23
[Python] 폰켓몬  (0) 2022.12.14
[Python] 완주하지 못한 선수  (0) 2022.12.14
Comments