💡코딩테스트/프로그래머스

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

두_두 2023. 4. 17. 11:59

👀 문제

 

프로그래머스

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

programmers.co.kr

  1. 속한 노래가 많이 재생된 장르를 먼저 수록합니다.
  2. 장르 내에서 많이 재생된 노래를 먼저 수록합니다.
  3. 장르 내에서 재생 횟수가 같은 노래 중에서는 고유 번호가 낮은 노래를 먼저 수록합니다.

 

👁 풀이

  • count = 베스트앨범 안에 들어간 곡 수
  • dic = 각 장르별 플레이 수
  • li 안에 각 노래의 고유번호, 장르, 플레이 수를 넣은 후 플레이 수로 정렬해 준다 ➡️ 장르 내에서 많이 재생된 노래를 2곡씩 선택할 때 편해짐
  • arr는 각 장르별 선택된 노래 2가지씩 들어있는 리스트 ➡️ 이 리스트를 많이 재생된 장르, 플레이수, 고유번호 순으로 정렬해 주면 되겠다.
from collections import defaultdict
def solution(genres, plays):
    arr = []
    count = defaultdict(int)
    dic = defaultdict(int)
    
    li = list([idx, x[0], x[1]] for idx, x in enumerate(zip(genres, plays)))
    li.sort(key = lambda x : -x[2])

    for idx, genre, play in li:
        dic[genre] += play

        if count[genre] < 2:
            count[genre] += 1
            arr.append([idx, genre, play])
            
    return [x[0] for x in sorted(arr, key = lambda x : (-dic[x[1]], -x[2], x[0]))]
728x90