package lmhs.comm.base.test;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
public class Test2 {
public static void main(String[] args) {
String [] genres= {"classic", "pop", "classic", "classic", "pop","latin"};// 0 1 2 3 4
int [] plays = {500,600,150,800,2500,5000}; //14 023//5 4 1 3 0
int[] cnt1 = solution(genres,plays);
for(int i : cnt1) {
System.out.println(i); //4 1 0 3 0 => 4 1 3 0
}
}
public static int[] solution(String[] genres, int[] plays) {
//1. 장르별 합산 담기
// classics 1450 pop 3100
Map<String, Integer> sum = new HashMap<String, Integer>();
for(int i=0;i<genres.length;i++) {
int value= sum.getOrDefault(genres[i], 0) ;
value += plays[i];
sum.put(genres[i], value);
}
// 2. 장르별 합산 정렬
// pop 3100 classics 1450
List<Map.Entry<String, Integer>> sumentries =
sum.entrySet().stream()
.sorted(Collections.reverseOrder(Map.Entry.comparingByValue()))
.collect(Collectors.toList());
List<Integer> list = new ArrayList<Integer>();
List<Integer> temparr = null;
for(Map.Entry<String, Integer> e : sumentries) { // pop 3100 classics 1450
int samecnt=0;
temparr =new ArrayList<Integer>();
String thisKey=e.getKey();
for(int i=0;i<genres.length;i++) {
if(genres[i].equals(thisKey)){
temparr.add(i); // 1 4 0 2 3 장르별 높은 plays 로 정렬
if(samecnt>0) { //동일한 장르가 rank 에 1개 이상 존재하면 정렬 & 다른 장르와 섞이지 않게 정렬해야함
for(int k=0;k<temparr.size()-1;k++) {
for(int j=k+1;j<temparr.size();j++) {
if(plays[temparr.get(k)] < plays[temparr.get(j)]) {
int temp=temparr.get(k);
temparr.set(k, temparr.get(j));
temparr.set(j, temp) ;
}
}
}
}
samecnt+=1;
}
}
//장르별 최대 2개까지만
for(int i=0;i<temparr.size();i++) {
if(i<2) {
list.add(temparr.get(i));
}
}
}
int[] ranks = new int[list.size()]; // 인덱스 결과물
for(int i=0;i<list.size();i++) {
ranks[i] = list.get(i);
}
return ranks;
}
}