실패율

nomoreFt·2021년 6월 23일
0

코딩테스트 연습 - 실패율

import java.util.*;

class Solution {
    class Fail {
        int stage;
        double rate;
        Fail(int stage, double rate){
            this.stage = stage;
            this.rate = rate;
        }
    }
    Comparator<Fail> comp = new Comparator<Fail>(){
        public int compare(Fail a, Fail b){
            if(a.rate < b.rate)
                return 1;
            else if (a.rate > b.rate)
                return -1;
            else{
                if(a.stage < b.stage)
                    return -1;
                else if(a.stage > b.stage)
                    return 1;
                else return 0;
            }
        }
    };
    public int[] solution(int N, int[] stages) {
        int[] answer = new int[N];
        List<Fail> fails = new ArrayList<Fail>();
        int total = stages.length;
        
        int[] users = new int[N+1];
        for(int s : stages){
            users[s-1]++;
        }
        
        for( int i=0; i<N; i++){
            if(users[i] == 0) 
                fails.add(new Fail(i+1,0));
            else{
                fails.add(new Fail(i+1,(double)users[i]/total));
                total -= users[i];
            }
        }
          Collections.sort(fails, comp);
        for(int i = 0; i < N; i++){
            answer[i] = fails.get(i).stage;
        }
        return answer;
    }
}
  • 서술 : 실패율과 stage가 담긴 class 생성, stages에서 1~N+1까지 반복하며 class에 실패율과 idx를 new 하여 List 생성해준다.
    실패율 계산은 (해당 스테이지에 있는 사용자/남아있는 도전자수) 이므로 각 스테이지에 남아있는 user들을 먼저 구해서 전체에서 빼가며 실패율을 구해나간다.
profile
디지털 세상에서 살아남기

0개의 댓글