프로그래머스 실패율 [Java]

문제출처

https://programmers.co.kr/learn/courses/30/lessons/42889

 

코딩테스트 연습 - 실패율

실패율 슈퍼 게임 개발자 오렐리는 큰 고민에 빠졌다. 그녀가 만든 프랜즈 오천성이 대성공을 거뒀지만, 요즘 신규 사용자의 수가 급감한 것이다. 원인은 신규 사용자와 기존 사용자 사이에 스

programmers.co.kr

import java.util.*;
class Solution {
    public int[] solution(int N, int[] stages) {
        Map<Integer, Double> rate = new HashMap<>();
        for(int i = 1; i <= N; i++){
            int stage_count = 0; //클리어하지 못 한 사람 수
            int user_count = 0; //도전한 사람 수 
            for(int s : stages){
                if(s >= i) { user_count++; }
                if(s == i) { stage_count++;}
            }
            if(user_count == 0){
                rate.put(i, 0.0);
            }
            else{
                rate.put(i, (double)stage_count / user_count);
            }
            
        }
        
        List<Map.Entry<Integer, Double>> fail_list = new LinkedList<>(rate.entrySet());
        fail_list.sort((o1, o2) -> o2.getValue().compareTo(o1.getValue()));
        
        int[] answer = new int[N];
        int idx = 0;
        for(Map.Entry<Integer, Double> f : fail_list){
            answer[idx++] = f.getKey();
        }
        return answer;
    }
}

문제가 안풀릴때 늘 먼저 생각해야하는 것 : 최소한 문제에서 알려준 제한사항을 모두 지켰는가?

내가 안 풀렸던 경우는 제한사항에서

  • 스테이지에 도달한 유저가 없는 경우 해당 스테이지의 실패율은 0 으로 정의한다.

이부분을 간과하고 있었다. user_count == 0인 경우를 따로 빼주니 바로 해결됨.

문제에서 제시하는 제한사항을 최소한 다 지키고 나서 안 풀린다고 고민을 해야겠다...

 

다른 사람 풀이를 보니 class를 따로 빼서 하는 경우도 있고 라이브러리를 하나도 import하지 않고 푸는 방법도 있던데 자바의 사용법은 정말 무궁무진하다를 깨닫고 있다.

myoskin