최대 1 분 소요

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;
    }

실행결과-java 실행결과-js


업데이트: