[문제]
https://school.programmers.co.kr/learn/courses/30/lessons/42579https://school.programmers.co.kr/learn/courses/30/lessons/42579
[풀이]
HashMap을 이용한 연산을 통해 해결 가능.
[코드]
import java.util.*;
class Solution {
Map<String, Integer> hs = new HashMap<>(); //장르별 총 재생횟수
Map<String, Map<Integer, Integer>> music = new HashMap<>(); //장르별 고유번호와 재생횟수
public int[] solution(String[] genres, int[] plays) {
int[] answer = {};
for(int i=0; i<genres.length; i++){
hs.put(genres[i], hs.getOrDefault(genres[i], 0)+plays[i]);
if(music.containsKey(genres[i])){
music.get(genres[i]).put(i, plays[i]);
}
else{
Map<Integer, Integer> temp = new HashMap<>();
temp.put(i, plays[i]);
music.put(genres[i], temp);
}
}
List<Integer> answers = new ArrayList<>();
List<String> keyList = new ArrayList(hs.keySet());
Collections.sort(keyList, (o1, o2) -> hs.get(o2)-hs.get(o1)); //많이 재생된 장르 순으로 정렬
int idx = 0;
for(String key:keyList){
Map<Integer,Integer> map = music.get(key);
List<Integer> keys = new ArrayList(map.keySet());
Collections.sort(keys, (o1, o2)->map.get(o2)-map.get(o1)); //많이 재생된 곡 순으로 정렬
answers.add(keys.get(0));
if(keys.size()>1){
answers.add(keys.get(1));
}
}
answer = answers.stream().mapToInt(i->i).toArray();
return answer;
}
}
'알고리즘 공부 및 문제 풀이 > 프로그래머스(PRO)' 카테고리의 다른 글
[pro] 프로그래머스 level3 42627 디스크 컨트롤러 (Java) - 힙(우선순위 큐) (0) | 2023.02.03 |
---|---|
[pro] 프로그래머스 level3 12942 최적의 행렬 곱셈 - dp (0) | 2023.02.02 |
[pro] 프로그래머스 level3 12987 숫자 게임 (Java) - 그리디, 투포인터 (0) | 2023.02.02 |
[pro] 프로그래머스 level3 12971 스티커 모으기2 (Java) - dp (0) | 2023.01.31 |
[pro] 프로그래머스 level3 1836 리틀 프렌즈 사천성 (Java) - 시뮬레이션 (0) | 2023.01.31 |