반응형
https://programmers.co.kr/learn/courses/30/lessons/42579
1. 2022.04.07 시도
소요시간: 44분
import java.util.*;
import java.util.Map.Entry;
class Solution {
public int[] solution(String[] genres, int[] plays) {
Map<String, Map<Integer, Integer>> songMap = new HashMap<>();
Map<String, Integer> genreMap = new HashMap<>();
for(int i=0; i<genres.length; i++) {
String genre = genres[i];
Integer playCount = plays[i];
Map<Integer, Integer> tempMap = songMap.getOrDefault(genre, new HashMap<>());
tempMap.put(i, playCount);
songMap.put(genre, tempMap);
genreMap.put(genre, genreMap.getOrDefault(genre, 0) + playCount);
}
List<Map.Entry<String, Integer>> genreList = new ArrayList<>(genreMap.entrySet());
genreList.sort(Map.Entry.comparingByValue());
Collections.reverse(genreList);
List<Integer> answer = new ArrayList<>();
for (Map.Entry<String, Integer> entry: genreList) {
String genre = entry.getKey();
Map<Integer, Integer> tempMap = songMap.get(genre);
List<Map.Entry<Integer, Integer>> songList = new ArrayList<>(tempMap.entrySet());
Collections.sort(songList, (o1, o2) -> {
int ret = o1.getValue().compareTo(o2.getValue()) * -1;
if (ret == 0) {
return o1.getKey().compareTo(o2.getKey());
}
return ret;
});
int limit = 0;
for (Map.Entry<Integer, Integer> songEntry: songList) {
if (limit < 2) {
answer.add(songEntry.getKey());
limit++;
}
}
}
int counter = 0;
int[] ret = new int[answer.size()];
for (Integer each: answer) {
ret[counter++] = each;
}
return ret;
}
}
풀이 접근 과정
일단 필요한 정보를 Map으로 저장한다.
저장된 Map을 정렬하고 순서를 List에 저장한다.
배열에 맞게 List를 다시 넣어준다.
느낀점
- 이상하게 홀리는 느낌이다. leetcode에서 풀었던 쉬웠던걸까. 이상하게 한글이 더 눈에 안들어오는 착시가 있고 문제가 내기준 손이 많이 간다.
- 프로그래머스는 import도 잘 알아두는게 중요하다.
- 이번에 Map을 value기준으로 소팅하는 법을 제대로 배웠다. entrySet과 List, Collections.sort를 이용하는데 간추리면 아래와 같다.
Map<String, Integer> map = new HashMap<>();
List<Map.Entry<String, Integer>> list = new ArrayList<>(map.entrySet());
Collections.sort(list, (o1,o2)-> {
return o1.getValue().compareTo(o2.getValue()); //오름차순
});
알고리즘 정리노트: .leetcode(알고리즘 문제풀이 접근)
반응형
'알고리즘 풀이' 카테고리의 다른 글
.programmers(프린터) (0) | 2022.04.08 |
---|---|
.programmers(기능개발) (0) | 2022.04.08 |
.programmers(위장) (0) | 2022.04.07 |
.programmers(전화번호 목록) (0) | 2022.04.07 |
.programmers(완주하지 못한 선수) (0) | 2022.04.07 |