알고리즘/Python

[python] 프로그래머스 - 베스트앨범

제주도랏맨 2023. 4. 16. 00:03

출처 : 프로그래머스, https://school.programmers.co.kr/learn/courses/30/lessons/42579

 

프로그래머스

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

programmers.co.kr

 

# 많이 플레이된 장르순 -> 장르 내에서 가장 많이 플레이된 노래 순으로 2개 수록
    # 같은 경우 idx가 작은 것부터 수록

 

더보기

 

먼저, 생각해야 할 부분

 

1. 많이 플레이된 장르 순으로, 장르 내에서 플레이 수가 상위 2개인 노래를 담아야한다.

    이를 위해서는 장르별 플레이수, 장르별 플레이 순으로 정렬된 노래가 필요하다.

   위 둘을 구하면, 플레이 수가 많은 장르를 가져와서 장르별 노래에서 상위 2개를 가져와 추가하면 된다.

 


 

풀이

 

from collections import defaultdict

def solution(genres, plays):
    answer = []
    
    # 많이 플레이된 장르순 -> 장르 내에서 가장 많이 플레이된 노래 순으로 2개 수록
        # 같은 경우 idx가 작은 것부터 수록
    
    # 장르별 합산
    genre_dict = defaultdict(int)
    # 장르별 노래
    genre_song_dict = defaultdict(lambda : [])
    
    for i in range(len(plays)):
        genre = genres[i]
        song = i
        play = plays[i]
        
        genre_dict[genre] += play
        genre_song_dict[genre].append([song, play])
        
    # 장르별 순서 정렬
    for genre, song_list in genre_song_dict.items():
        # 각 장르별로 노래를 플레이 순으로 내림차순 정렬하고 상위 2개를 잘라 리스트로 만들어 장르_노래에 넣는다.
        genre_song_dict[genre] = [song_idx for song_idx, play in sorted(song_list, key = lambda x: -x[1])[:2]]

    # 가장 많이 플레이된 장르 순으로 장르별 상위 2개 노래를 answer에 추가
    for genre, play in sorted(list(genre_dict.items()), key = lambda x: -x[1]):
        answer += genre_song_dict[genre]
        
    return answer

 


 

Github

 

GitHub - bh2980/Algorithm-Problem: 알고리즘 풀이 흔적들

알고리즘 풀이 흔적들. Contribute to bh2980/Algorithm-Problem development by creating an account on GitHub.

github.com