
문제 풀이
사실 레벨 3 치고는 그닥 어렵다고 생각하지 않는 문제입니다. 그냥 딕셔너리 2개 써서 정렬해서 푸니까 풀리더라구요..
장르별 총 합을 저장하는 genre_total 딕셔너리와 장르 + 번호 별 노래가 재생된 횟수를 저장하는 genre_songs 딕셔너리 두개로 풀면 됩니다.
먼저 genres와 plays를 하나의 range로 받아서 양쪽에 저장한 다음 genre_total을 정렬하여 재생횟수 순으로 나열하고, 그 순서대로 2개씩 뽑아버리면 쉬운 문제입니다.
여기에 heapq를 섞는 방식으로 풀면 정렬이 필요하지 않을 수 있겠네요.
풀이 코드
def solution(genres, plays):
answer = []
genre_total = {}
genre_songs = {}
n = len(genres)
# 딕셔너리에 값들 넣기
for i in range(n):
g, p = genres[i], plays[i]
genre_total[g] = genre_total.get(g, 0) + p
if g not in genre_songs:
genre_songs[g] = []
genre_songs[g].append((p, i))
# 총 재생 횟수로 정렬
sorted_genres = sorted(genre_total.items(), key=lambda x: x[1], reverse=True)
# 재생 횟수가 높은 애들을 기준으로 정렬 후 2개만 뽑아냄
for genre, _ in sorted_genres:
songs = sorted(genre_songs[genre], key=lambda x: (-x[0], x[1]))
answer.extend([idx for p, idx in songs[:2]])
return answer반응형
'프로그래머스 - Python > 알고리즘 고득점 Kit' 카테고리의 다른 글
| [알고리즘 고득점 Kit] 소수 찾기 (0) | 2026.02.20 |
|---|---|
| [프로그래머스 LV.3] 디스크 컨트롤러 (0) | 2026.02.20 |
| [알고리즘 고득점 Kit] 그래프 - 가장 먼 노드 (0) | 2025.10.02 |
| 알고리즘 고득점 Kit - 그래프 - 순위 (3) | 2025.07.24 |
| 알고리즘 고득점 Kit - 여행경로(DFS) (2) | 2025.07.10 |