Skip to content

Commit 7f497e5

Browse files
committed
[level 3] Title: 베스트앨범, Time: 0.12 ms, Memory: 9.21 MB -BaekjoonHub
1 parent f4d3047 commit 7f497e5

File tree

2 files changed

+104
-0
lines changed

2 files changed

+104
-0
lines changed
Lines changed: 85 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,85 @@
1+
# [level 3] 베스트앨범 - 42579
2+
3+
[문제 링크](https://school.programmers.co.kr/learn/courses/30/lessons/42579)
4+
5+
### 성능 요약
6+
7+
메모리: 9.21 MB, 시간: 0.12 ms
8+
9+
### 구분
10+
11+
코딩테스트 연습 > 해시
12+
13+
### 채점결과
14+
15+
정확성: 100.0<br/>합계: 100.0 / 100.0
16+
17+
### 제출 일자
18+
19+
2026년 03월 24일 14:08:54
20+
21+
### 문제 설명
22+
23+
<p>스트리밍 사이트에서 장르 별로 가장 많이 재생된 노래를 두 개씩 모아 베스트 앨범을 출시하려 합니다. 노래는 고유 번호로 구분하며, 노래를 수록하는 기준은 다음과 같습니다.</p>
24+
25+
<ol>
26+
<li>속한 노래가 많이 재생된 장르를 먼저 수록합니다.</li>
27+
<li>장르 내에서 많이 재생된 노래를 먼저 수록합니다.</li>
28+
<li>장르 내에서 재생 횟수가 같은 노래 중에서는 고유 번호가 낮은 노래를 먼저 수록합니다.</li>
29+
</ol>
30+
31+
<p>노래의 장르를 나타내는 문자열 배열 genres와 노래별 재생 횟수를 나타내는 정수 배열 plays가 주어질 때, 베스트 앨범에 들어갈 노래의 고유 번호를 순서대로 return 하도록 solution 함수를 완성하세요.</p>
32+
33+
<h5>제한사항</h5>
34+
35+
<ul>
36+
<li>genres[i]는 고유번호가 i인 노래의 장르입니다.</li>
37+
<li>plays[i]는 고유번호가 i인 노래가 재생된 횟수입니다.</li>
38+
<li>genres와 plays의 길이는 같으며, 이는 1 이상 10,000 이하입니다.</li>
39+
<li>장르 종류는 100개 미만입니다.</li>
40+
<li>장르에 속한 곡이 하나라면, 하나의 곡만 선택합니다.</li>
41+
<li>모든 장르는 재생된 횟수가 다릅니다.</li>
42+
</ul>
43+
44+
<h5>입출력 예</h5>
45+
<table class="table">
46+
<thead><tr>
47+
<th>genres</th>
48+
<th>plays</th>
49+
<th>return</th>
50+
</tr>
51+
</thead>
52+
<tbody><tr>
53+
<td>["classic", "pop", "classic", "classic", "pop"]</td>
54+
<td>[500, 600, 150, 800, 2500]</td>
55+
<td>[4, 1, 3, 0]</td>
56+
</tr>
57+
</tbody>
58+
</table>
59+
<h5>입출력 예 설명</h5>
60+
61+
<p>classic 장르는 1,450회 재생되었으며, classic 노래는 다음과 같습니다.</p>
62+
63+
<ul>
64+
<li>고유 번호 3: 800회 재생</li>
65+
<li>고유 번호 0: 500회 재생</li>
66+
<li>고유 번호 2: 150회 재생</li>
67+
</ul>
68+
69+
<p>pop 장르는 3,100회 재생되었으며, pop 노래는 다음과 같습니다.</p>
70+
71+
<ul>
72+
<li>고유 번호 4: 2,500회 재생</li>
73+
<li>고유 번호 1: 600회 재생</li>
74+
</ul>
75+
76+
<p>따라서 pop 장르의 [4, 1]번 노래를 먼저, classic 장르의 [3, 0]번 노래를 그다음에 수록합니다.</p>
77+
78+
<ul>
79+
<li>장르 별로 가장 많이 재생된 노래를 최대 두 개까지 모아 베스트 앨범을 출시하므로 2번 노래는 수록되지 않습니다.</li>
80+
</ul>
81+
82+
<p>※ 공지 - 2019년 2월 28일 테스트케이스가 추가되었습니다.</p>
83+
84+
85+
> 출처: 프로그래머스 코딩 테스트 연습, https://school.programmers.co.kr/learn/challenges
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
def solution(genres, plays):
2+
stream = {}
3+
for i, (g, p) in enumerate(zip(genres, plays)):
4+
if g not in stream.keys():
5+
stream[g] = [(i, p)]
6+
else:
7+
stream[g].append((i, p))
8+
9+
sorted_genres = sorted(stream.items(),
10+
key=lambda x: sum(song[1] for song in x[1]),
11+
reverse=True)
12+
13+
answer = []
14+
15+
for genre, songs in sorted_genres:
16+
songs.sort(key=lambda x: (-x[1], x[0]))
17+
answer.extend([song[0] for song in songs[:2]])
18+
19+
return answer

0 commit comments

Comments
 (0)