🌞Algorithm/🔥Baekjoon

[programmers] 베스트앨범

뿌야._. 2026. 7. 24. 10:45
문제
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