본문 바로가기

프로그래머스

프로그래머스 - 실패율

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