https://programmers.co.kr/learn/courses/30/lessons/42579
import java.util.*;
class Solution {
public int[] solution(String[] genres, int[] plays) {
HashMap<String, Integer> g1 = new HashMap<>();
for (int i = 0; i < genres.length; i++) {
g1.put(genres[i], g1.getOrDefault(genres[i], 0) + plays[i]);
}
TreeMap<Integer, String> g2 = new TreeMap<>(Collections.reverseOrder());
g1.forEach((k, v) -> g2.put(v, k));
ArrayList<Integer> answer2 = new ArrayList<>();
// 여기 for문에서는 가장 많이 나오는 장르부터 돈다
for (var genre : g2.values()) {
ArrayList<Integer> temp = new ArrayList<>(); // 장르에 해당하는 곡 번호가 담김
for (int i = 0; i < genres.length; i++) {
if (!genres[i].equals(genre)) continue;
temp.add(i);
}
Collections.sort(temp, new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
if (plays[o1] == plays[o2]) {
return Integer.compare(o1, o2);
}
else {
return Integer.compare(plays[o2], plays[o1]);
}
}
});
answer2.add(temp.get(0));
if (temp.size() > 1) {
answer2.add(temp.get(1));
}
}
int[] answer = new int[answer2.size()];
for (int i = 0; i < answer2.size(); i++) {
answer[i] = answer2.get(i);
}
return answer;
}
}
C++은 return 형식이 vector라서 그냥 vector에 때려넣고 return하면 되는 반면
자바는 return 형식이 배열이라서 ArrayList를 쓰면 나중에 배열로 변환시켜줘야 한다
이거 C++에 너무 유리한거 아닌가 ㅋㅋㅋㅋ
새로 알게된거
- HashMap의 foreach
- ArrayList 정렬시키는거 Collections.sort() (배열은 Arrays.sort())
- comparator
'Algorithm > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 지형 이동 - Java (0) | 2020.05.18 |
---|---|
[프로그래머스] 종이접기 - Java (0) | 2020.05.18 |
[프로그래머스] 전화번호 목록 (0) | 2020.05.17 |
[프로그래머스] 완주하지 못한 선수 (0) | 2020.05.17 |
[프로그래머스] 다리를 지나는 트럭 (0) | 2020.05.16 |