https://school.programmers.co.kr/learn/courses/30/lessons/42579

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr


풀이 과정

각 노래의 장르와, 플레이 된 횟수가 주어질 때, 가장 많이 플레이된 장르의 노래가 먼저 나오게끔, 각 장르별로 많이 재생된 2개의 노래씩을 모아 베스트 앨범을 만드는 문제이다.

 

장르: [장르 재생 횟수, [[노래 인덱스, 재생 횟수], [노래 인덱스, 재생 횟수]...] 꼴의 딕셔너리를 만들고, 장르 재생 횟수와 노래 재생 횟수로 적절히 정렬을 수행하여 문제를 해결하였다.

 

코드에서 딕셔너리 genres_dict와 딕셔너리를 정렬된 리스트로 표현한 temp를 중간에 출력한 테스트 결과이다.


소스 코드

import collections

def solution(genres, plays):
    genres_dict = collections.defaultdict(list)
    for index, genre in enumerate(genres):
        if not genres_dict[genre]:
            genres_dict[genre].append(plays[index])
            genres_dict[genre].append([[index, plays[index]]])
        else:
            genres_dict[genre][1].append([index, plays[index]])
            genres_dict[genre][0] += plays[index]
    temp = sorted(genres_dict.values(), key=lambda x: x[0], reverse=True)
    for song in temp:
        song[1].sort(key=lambda x: x[1], reverse=True)
    answer = []
    for song in temp:
        if len(song[1]) >= 2:
            answer.append(song[1][0][0])
            answer.append(song[1][1][0])
        else:
            answer.append(song[1][0][0])
        
    return answer

+ Recent posts