실패율 = 스테이지에 도달했으나 아직 클리어하지 못한 플레이어의 수 / 스테이지에 도달한 플레이어 수
N = 전체 스테이지의 개수
stages = 게임을 이용하는 사용자가 현재 멈춰있는 스테이지의 번호가 담긴 배열
-> 실패율이 높은 스테이지부터 내림차순으로 스테이지의 번호가 담겨있는 배열을 return
예전에 실패했던건데
풀긴했지만 풀이가 좀 더럽긴함
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
class Solution {
public int[] solution(int N, int[] stages) {
int[] answer = new int[N];
int player_num = stages.length;
HashMap<Integer, Integer> clear_player_map = new HashMap<Integer, Integer>();
HashMap<Integer, Integer> try_player_map = new HashMap<Integer, Integer>();
HashMap<Integer, Double> failture = new HashMap<Integer, Double>();
for (int i = 0; i < N; i++) {
try_player_map.put(i, 0);
clear_player_map.put(i, 0);
}
for (int i = 0; i < stages.length; i++) {
for (int j = 0; j < stages[i]; j++) {
if(j==N) continue;
try_player_map.put(j, try_player_map.get(j) + 1);
if (j < stages[i] - 1) {
clear_player_map.put(j, clear_player_map.get(j) + 1);
}
}
}
for (int i = 0; i < N; i++) {
double f = (try_player_map.get(i) - clear_player_map.get(i)) / (double) try_player_map.get(i);
if(f!=f)
f=0;
failture.put(i, f);
}
List<Integer> keySetList = new ArrayList<>(failture.keySet());
Collections.sort(keySetList, (o1, o2) -> (failture.get(o2).compareTo(failture.get(o1))));
int index = 0;
for (Integer key : keySetList) {
answer[index++] = key + 1;
}
return answer;
}
}