베스트앨범

Eunseo·2022년 7월 21일
0

Programmers

목록 보기
9/9
post-thumbnail

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

✅ Problem Summary

노래 장르(genres)와 재생 횟수(plays)가 주어질 때, 장르별 가장 많이 재생된 노래 2개씩 모아 해당 노래의 인덱스(index)를 다음 조건에 맞추어 순서대로 출력하는 문제

  1. 속한 노래가 많이 재생된 장르를 먼저 수록한다.
  2. 장르 내에서 많이 재생된 노래를 먼저 수록한다.
  3. 장르 내에서 재생 횟수가 같은 노래 중에서는 고유 번호(인덱스, index)가 낮은 노래를 먼저 수록한다.

📑 My Answer

  • 모든 테스트 케이스 통과
def solution(genres, plays):
    streamingInfo = {}
    for i, (g, p) in enumerate(zip(genres, plays)):
        value = streamingInfo.get(g, [0, []])
        value[0] += p
        value[1].append((p, i))
        streamingInfo[g] = value

    answer = []
    for songs in sorted(streamingInfo.values(), reverse=True):
        songs[1].sort(key=lambda x:x[0], reverse=True)
        answer += [s[1] for s in songs[1][:2]]
    return answer

📌 코드 구현 설명

  • 딕셔너리(dictionary) 자료형을 사용하여 주어진 곡들을 장르별로 (재생횟수 p, 인덱스 i) 형태로 저장한다.
    • 장르 별 노래들의 재생 횟수의 총합도 같이 저장하여 이후 속한 노래가 많이 재생된 장르를 찾는데 사용
  • 곡 정보가 저장된 딕셔너리가 만들어졌다면, 문제 에서 주어진 조건에 따라 값들을 정렬한다.
    • 속한 노래가 많이 재생된 장르를 먼저 수록하기 위해 우선 장르별 곡들의 총 재생 횟수를 기준으로 내림차순 정렬
    • 다음으로는 장르 내에서 많이 재생된 노래를 먼저 수록해야 하므로 노래 별 재생 횟수를 기준으로 내림차순 정렬 (이 과정에서 3번 조건은 자동으로 정렬됨)
  • 정렬된 리스트 songs에서 해당 곡의 인덱스를 순서대로 answer에 저장하여 답을 구한다.

profile
내가 공부한 것들

0개의 댓글