1 분 소요

문제 링크

내 풀이

# 1. 장르 별 재생 횟수 dict에 저장하기
# 2. 장르 안에서 재생수 순서로 append 하기
# 3. 재생수 순서로 배열하고, 고유 번호 순으로 오름차순하고 앞에거 먼저 append(장르별로 두개씩)
# 고유 번호가 index 값 (dict의 key로 써야할듯)

def solution(genres, plays):
    play_time = {}
    result = []
    
    for genre, play in zip(genres, plays): # 어떤 장르가 가장 많이 재생됐나
        if genre in play_time:
            play_time[genre] += play
        else:
            play_time[genre] = play 
            
    # key를 재생 수로 배열        
    for key, value in sorted(play_time.items(), key = lambda x: x[1], reverse = True): 
        genre_play = {}
        for i, genre in enumerate(genres): # 장르마다 고유번호 별 재생 횟수
            if genre == key:
                genre_play[i] = plays[i]
                
        # value값 기준으로 내림차순
        sorted_genre = sorted(genre_play.items(), key = lambda x: x[1], reverse = True) 
        
        if len(sorted_genre) >= 2: # 장르에 속한 곡이 하나라면, 하나의 곡만 선택
            for i in range(2):
                result.append(sorted_genre[i][0])
        else:
            result.append(sorted_genre[0][0])
            
    return result
    

다른 풀이

def solution(genres, plays):
    answer = []
    genres_dict = {}
    play_dict = {}

    for i in range(len(genres)):
        genre = genres[i]
        play = plays[i]
        if genre not in genres_dict:
            genres_dict[genre] = []
            play_dict[genre] = 0
        genres_dict[genre].append((i,play))
        play_dict[genre] += play

    sorted_genres = sorted(play_dict.items(), key = lambda x : x[1], reverese = True)

    for genre, _ in sorted_genres:
        sorted_songs = sorted(genres_dict[genre], key = lambda x: (-x[1], x[0]))
        answer.extend([idx for idx, _ in sorted_songs[:2]])

    return answer
    
출처 : 코딩테스트 합격자 되기 파이썬 , 저자: 박경록

댓글남기기