import java.util.*;
class Solution {
public int[] solution(int N, int[] stages) {
Map<Integer, Double> savePot = new HashMap<>();
// 각 스테이지마다 실패율 계산 후 저장
for (int i = 1; i <= N; i++) {
double passCheck = 0;
double failureCheck = 0;
for (int j = 0; j < stages.length; j++) {
if (stages[j] == i) {
passCheck++;
failureCheck++;
} else if (stages[j] > i) {
passCheck++;
}
}
if(passCheck == 0){
savePot.put(i,0.0);
}
else{
savePot.put(i, failureCheck / passCheck);
}
}
// Map의 엔트리를 리스트로 변환 후 정렬
List<Map.Entry<Integer, Double>> list = new ArrayList<>(savePot.entrySet());
Collections.sort(list, (o1, o2) -> {
int compareValue = o2.getValue().compareTo(o1.getValue()); // 실패율 내림차순
if (compareValue == 0) {
return o1.getKey().compareTo(o2.getKey()); // 실패율이 같다면 스테이지 번호 오름차순
}
return compareValue;
});
// 정렬된 스테이지 번호를 answer 배열에 담기
int[] answer = new int[N];
for (int i = 0; i < N; i++) {
answer[i] = list.get(i).getKey();
}
return answer;
}
}