천리길도 한걸음부터

문제06. 실패율⭐⭐ 본문

코딩 테스트 합격자 되기_자바💜

문제06. 실패율⭐⭐

밤연양갱 2024. 8. 12. 23:54
- 저자 권장 시간 : 60
- 권장 시간 복잡도 : O(M+NlogN)
- 출제 : 2019 KAKAO BLIND RECRUITMENT
 
import java.util.HashMap;

class Solution {
    public int[] solution(int N, int[] stages) {
        // 1. 스테이지별 도전자 수를 구함
        int[] challenger = new int[N+2];
        for (int i=0; i<stages.length; i++) {
            challenger[stages[i]] += 1;
        }

        // 2. 스테이지별 실패한 사용자 수 계산
        HashMap<Integer, Double> fails = new hashMap<>();
        double total = stages.length;

        // 3. 각 스테이지를 순회하며, 실패율 계산
        for (int i=1; i<= N; i++) {
            if (challenger[i] == 0) { // 4. 도전한 사람이 없는 경우, 실패율은 0
                fails.put(i, 0.);
            }
            else {
                fails.put(i, challenger[i]/total); // 5. 실패율 구함
                total -= challenger[i]; // 6. 다음 스테이지 실패율을 구하기 위해 현재 스테이지의 인원을 뺌
            }
        }
        // 7. 실패율이 높은 스테이지부터 내림차순으로 정렬
        return fails.entrySet().stream().sorted((o1, o2) -> Double.compare(o2.getValue(), o1.getValue())).mapToInt(HashMap.Entry::getKey).toArray();
    }
}
 
 
으아아.. 리턴하는 부분 정렬하고 형변환? 하는게 일이네ㅋㅋㅋ 낯설어..