스파르타 코딩클럽/3주차

멜론 베스트 앨범 뽑기

코딩쪼앙 2022. 3. 28. 09:58

문제

해결 방법

해쉬로 많이 재생된 장르를 찾아낸 후 다시 해쉬로 각 장르별 인덱스와 재생횟수를 저장한다.

그 후 많이 재생된 장르순으로 인덱스와 재생횟수를 저장 한 후 인덱스만 꺼내 두 개 씩만 뽑아낸다.

genres = ["classic", "pop", "classic", "classic", "pop"]
plays = [500, 600, 150, 800, 2500]


def get_melon_best_album(genre_array, play_array):
    n = len(genre_array)
    genre_total_play_dict = {}
    genre_index_play_array = {}
    for i in range(n):
        # 해쉬로 값을 저장하기 위해 장르와 재생횟수를 꺼낸다.
        genre = genre_array[i]
        play = play_array[i]
        # 각 장르별 총 재생횟수를 해쉬로 저장하고, 인덱스와 재생횟수 또한 장르별로 해쉬로 저장
        if genre not in genre_total_play_dict:
            genre_total_play_dict[genre] = play
            genre_index_play_array[genre] = [[i,play]]
        else:
            genre_total_play_dict[genre] += play
            genre_index_play_array[genre].append([i,play])

    # 장르의 재생횟수 순대로 값을 뽑아내기위해 재생횟수를 내림차순으로 정렬
    sorted_genre_play_array = sorted(genre_total_play_dict.items(),key=lambda item:item[1],reverse=True)
    result = []

    # 많이 재생된 장르 순대로 인덱스와 재생횟수를 꺼내 새로운 배열에 저장 후 재생횟수 내림차순 정렬
    for genre,key in sorted_genre_play_array:
        index_play_array = genre_index_play_array[genre]
        sorted_index_play_array = sorted(index_play_array,key=lambda item:item[1],reverse=True)

        # 내림차순 정렬된 재생횟수와 배열에서 인덱스번호만 꺼내고, 두 개 이상 출력될 경우 break
        for i in range(len(sorted_index_play_array)):
            if i > 1:
                break
            result.append(sorted_index_play_array[i][0])
    return result


print(get_melon_best_album(genres, plays))  # 결과로 [4, 1, 3, 0] 가 와야 합니다!

'스파르타 코딩클럽 > 3주차' 카테고리의 다른 글

올바른 괄호  (0) 2022.03.24
최대 할인 적용하기  (0) 2022.03.24
해쉬 활용문제  (0) 2022.03.24
해쉬 구현하기  (0) 2022.03.24
큐 구현하기  (0) 2022.03.24