Problem Link
https://school.programmers.co.kr/learn/courses/30/lessons/42579
노래 장르(genres
)와 재생 횟수(plays
)가 주어질 때, 장르별 가장 많이 재생된 노래 2
개씩 모아 해당 노래의 인덱스(index)를 다음 조건에 맞추어 순서대로 출력하는 문제
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
에 저장하여 답을 구한다.