문제 설명
제한사항
입출력
문제풀이
import java.util.*;
class Solution {
public int[] solution(String[] genres, int[] plays) {
int[] answer = {};
ArrayList<Integer> answers = new ArrayList<>();
HashMap<String,Integer> hm = new HashMap<>();
for(int i = 0 ; i < genres.length;i++){
if(hm.containsKey(genres[i])==true){
hm.put(genres[i],hm.get(genres[i])+plays[i]);
continue;
}
hm.put(genres[i],plays[i]);
}
ArrayList<String> arr = new ArrayList<>(hm.keySet());
Collections.sort(arr, (o1, o2) -> (hm.get(o2).compareTo(hm.get(o1))));
for(String s : arr){
HashMap<Integer,Integer> tmp = new HashMap<>();
for(int i = 0 ; i < genres.length;i++ ){
if(s.equals(genres[i])){
tmp.put(i,plays[i]);
}
}
ArrayList<Integer> keyList = new ArrayList<>(tmp.keySet());
Collections.sort(keyList,(o1, o2) -> (tmp.get(o2).compareTo(tmp.get(o1))));
int cnt =0;
for(Integer k: keyList){
if(cnt>1){
break;
}
answers.add(k);
cnt++;
}
}
answer = new int[answers.size()];
for(int i = 0 ; i < answers.size();i++){
answer[i]=answers.get(i);
}
return answer;
}
}
※ 내 생각
프로그래머스를 처음 시작해보는 입장에서 정말 힘들었던 건 자동완성이 안되는 부분입니다......
코드 한줄 한줄 틀렸던 경우가 너무 많았고, 이를 해결하는데 에러를 보고 해결을 했습니다.
이 문제의 경우
먼저 각 장르별 플레이 누적값을 해쉬맵을 이용해 담아줍니다.
ArrayList를 이용해서 누적 값에 대해서 정렬을 해줍니다.
정렬된 장르에 대해서 해쉬를 이용해서 각각의 플레이 수와 인덱스를 저장해줍니다.
그리고 다시 정렬을 통해서 내림차순을 만들어 줍니다.
마지막으로 2개씩 담아주면 됩니다.
2개씩 담아줬던 것을 출력해주면 끝!
'Algorithm > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 이중 우선 순위 큐(자바) / 힙 (0) | 2021.10.01 |
---|---|
[프로그래머스] 디스크 컨트롤러(자바) /Heap (0) | 2021.09.27 |
[프로그래머스] 더 맵게 (자바) / 힙 (0) | 2021.09.16 |
[프로그래머스] 다리를 지나는 트럭(자바) / 큐 (0) | 2021.09.12 |
[프로그래머스] 프린터(자바) / 자료구조 (0) | 2021.09.09 |