코딩테스트 연습 - 실패율
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들을 먼저 구해서 전체에서 빼가며 실패율을 구해나간다.