알고리즘 공부 및 문제 풀이/프로그래머스(PRO)
[pro] 프로그래머스 level3 42579 베스트앨범 (Java) - 해쉬
yoonjiy
2023. 2. 2. 16:02
[문제]
https://school.programmers.co.kr/learn/courses/30/lessons/42579https://school.programmers.co.kr/learn/courses/30/lessons/42579
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
[풀이]
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;
}
}