문제
https://school.programmers.co.kr/learn/courses/30/lessons/42579
프로그래머스
SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
< 베스트앨범 >
문제 풀이 (Java)
import java.util.*;
class Solution {
public int[] solution(String[] genres, int[] plays) {
int[] answer;
HashMap<String, Integer> total = new HashMap<>();
HashMap<String, ArrayList<int[]>> songs = new HashMap<>();
for (int i = 0; i < genres.length; i++) {
if (total.containsKey(genres[i])) {
total.replace(genres[i], total.get(genres[i]) + plays[i]);
} else {
total.put(genres[i], plays[i]);
}
if (!songs.containsKey(genres[i])) {
songs.put(genres[i], new ArrayList<>());
}
songs.get(genres[i]).add(new int[] { i, plays[i] });
}
ArrayList<String> list = new ArrayList<>(total.keySet());
Collections.sort(list, new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
return total.get(o2) - total.get(o1);
}
});
ArrayList<Integer> result = new ArrayList<>();
for (String genre : list) {
ArrayList<int[]> temp = new ArrayList<>(songs.get(genre));
Collections.sort(temp, new Comparator<int[]>() {
@Override
public int compare(int[] o1, int[] o2) {
if (o1[1] == o2[1]) {
return o1[0] - o2[0];
}
return o2[1] - o1[1];
}
});
result.add(temp.get(0)[0]);
if (temp.size() > 1) {
result.add(temp.get(1)[0]);
}
}
answer = new int[result.size()];
for (int i = 0; i < result.size(); i++) {
answer[i] = result.get(i);
}
return answer;
}
}
genres와 plays를 탐색하며 장르별 노래 재생 횟수를 구하고, 각 노래를 장르별로 구분한다. 장르별 노래 재생 횟수를 내림차순으로 정렬한 후, 그 장르에 해당하는 각 노래의 재생 횟수를 내림차순으로 정렬하여 2개씩 ArrayList에 저장한다. ArrayList를 Array로 변환 후 반환한다.

출처: 프로그래머스 코딩 테스트 연습,
https://school.programmers.co.kr/learn/challenges
'🌞Algorithm > 🔥Baekjoon' 카테고리의 다른 글
| [Baekjoon] 32813_Oooh I See (0) | 2026.04.24 |
|---|---|
| [Baekjoon] 6107_Plumbing the Pond (0) | 2026.04.23 |
| [Baekjoon] 6754_Bridge transport (0) | 2026.04.22 |
| [Baekjoon] 27137_Square Designs (0) | 2026.04.21 |
| [Baekjoon] 13382_Lab (0) | 2026.04.20 |