packageprogrammers.sully.week3;importjava.util.*;class실패율{// (스테이지 도달했으나, 클리어 x) / (스테이지 도달한 플레이어 수)// N: 전체 스테이지 개수// stage: 사용자가 "멈춰있는" 스테이지 번호 배열 -> 각 배열은 사용자가 현재 도전 중인 스테이지 번호// 만약, 실패율 같은 스테이지 존재 -> 작은 번호의 스테이지가 먼저 오도록 (정렬할 때 예외처리 해줄 것.)// 스테이지에 도달한 유저가 없는 경우 -> 실패율 0으로 예외처리// 실패율이 높은 것부터 내림차순으로 스테이지 번호 담긴 배열 returnpublicstaticint[]solution(intN,int[]stages){Map<Integer,Double>map=newHashMap<>(N);// 분모는 stages의 길이로 초기화intdenominator=stages.length;for(inti=1;i<=N;i++){inttmp=i;intnumerator=(int)Arrays.stream(stages).filter(num->num==tmp).count();// System.out.println(numerator + "/" + denominator);if(denominator==0){map.put(i,0d);}else{map.put(i,(double)numerator/denominator);}// N이 증가할 때마다 분모는 분자값을 빼준 값이 됨denominator-=numerator;}List<Integer>list=newArrayList<>(map.keySet());list.sort(((o1,o2)->Double.compare(map.get(o2),map.get(o1))));returnlist.stream().mapToInt(Integer::intValue).toArray();}publicstaticvoidmain(String[]args){System.out.println(Arrays.toString(solution(5,newint[]{2,1,2,6,2,4,3,3})));}}
Leave a comment