def solution(genres, plays):
    # 장르별로 총 재생 횟수와 고유번호 재생 횟수 분류
    total_play_times = dict()
    total_plays = dict()

    for i in range(len(genres)):
        genre = genres[i]
        play = plays[i]

        if genre not in total_plays:
            total_play_times[genre] = 0
            total_plays[genre] = []

        total_play_times[genre] += play
        total_plays[genre].append((play, i))

    # total_play_times: {'classic': 1450, 'pop': 3100}
    # total_plays: {'classic': [(500, 0), (150, 2), (800, 3)], 'pop': [(600, 1), (2500, 4)]}

    answer = []
    total_play_times = sorted(total_play_times.items(), key=lambda x: x[1], reverse=True)
    # total_play_times: [('pop', 3100), ('classic', 1450)]

    for genre, total in total_play_times:
        # total_plays['pop']: [(600, 1), (2500, 4)]
        # total_plays['classic']: [(500, 0), (150, 2), (800, 3)]

        # 재생횟수 내림차순 && 고유번호 오름차순으로 정렬
        play_list = sorted(total_plays[genre], key=lambda x: (-x[0], x[1]))

        # 'pop' play_list: [(2500, 4), (600, 1)]
        # 'classic' play_list: [(800, 3), (500, 0), (150, 2)]

        # 해당 장르에서 가장 많이 들은 곡의 고유 번호를 answer에 추가
        answer.append(play_list[0][1])

        # 두 번째 곡이 있는 경우 answer에 추가
        if len(play_list) > 1:
            answer.append(play_list[1][1])

    return answer


# 정확성  테스트
# 테스트 1 〉	통과 (0.01ms, 10.2MB)
# 테스트 2 〉	통과 (0.01ms, 10.3MB)
# 테스트 3 〉	통과 (0.01ms, 10.2MB)
# 테스트 4 〉	통과 (0.01ms, 10.1MB)
# 테스트 5 〉	통과 (0.10ms, 10.1MB)
# 테스트 6 〉	통과 (0.06ms, 10.2MB)
# 테스트 7 〉	통과 (0.03ms, 10.2MB)
# 테스트 8 〉	통과 (0.03ms, 10.1MB)
# 테스트 9 〉	통과 (0.01ms, 10.1MB)
# 테스트 10 〉	통과 (0.06ms, 10.3MB)
# 테스트 11 〉	통과 (0.02ms, 10.2MB)
# 테스트 12 〉	통과 (0.04ms, 10.2MB)
# 테스트 13 〉	통과 (0.05ms, 10.2MB)
# 테스트 14 〉	통과 (0.06ms, 10.3MB)
# 테스트 15 〉	통과 (0.01ms, 10.4MB)
# 채점 결과
# 정확성: 100.0
# 합계: 100.0 / 100.0

assert (solution(["classic", "pop", "classic", "classic", "pop"], [500, 600, 150, 800, 2500]) == [4, 1, 3, 0])
