프로그래머스 - 실패율
part4. 실패율
java
class Solution {
Map<Integer, Map<String, Double>> stagMap = new HashMap<>();
double len = stages.length;
for (int i = 0; i < stages.length; i++) {
if(stages[i] == N + 1) continue;
Map<String, Double> tempObj = stagMap.getOrDefault(stages[i], new HashMap<>());
tempObj.put("cnt", tempObj.getOrDefault("cnt", 0.0) + 1);
stagMap.put(stages[i], tempObj);
}
for (int stg = 1; stg <= N; stg++) {
Map<String, Double> tempObj = stagMap.getOrDefault(stg, new HashMap<>());
tempObj.put("cnt", tempObj.getOrDefault("cnt", 0.0));
tempObj.put("rate", Double.isNaN(tempObj.get("cnt") / len) ? 0.0 : tempObj.get("cnt") / len);
stagMap.put(stg, tempObj);
len -= tempObj.get("cnt");
}
List<Map.Entry<Integer, Map<String, Double>>> entries = new ArrayList<>(stagMap.entrySet());
Collections.sort(entries, Comparator.comparing(entry -> entry.getValue().get("rate"),Comparator.reverseOrder()));
int[] answer = new int[N];
for (int i = 0; i < answer.length; i++) {
answer[i] = entries.get(i).getKey();
}
return answer;
}
js
function solution(N, stages) {
let usrNum = stages.length;
let stageList = stages.reduce((result, item) => {
if (item != N + 1) {
result[item - 1] += 1;
}
return result;
}, Array(N).fill(0));
stageList = stageList.map((el, idx) => {
const obj = {
rate: el / usrNum,
stage: idx + 1,
};
usrNum -= el;
return obj;
})
stageList.sort((a, b) => b.rate - a.rate == 0 ? a.stage - b.stage : b.rate - a.rate)
stageList = stageList.map(el => el.stage);
return stageList;
}