ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 프로그래머스 > 해시 >베스트 앨범
    기타/알고리즘 2021. 7. 21. 15:48
    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;
        }
    }
    반응형
Designed by Tistory.