프로그래머스 level1 ) 실패율

하우르·2021년 6월 30일
0

실패율 = 스테이지에 도달했으나 아직 클리어하지 못한 플레이어의 수 / 스테이지에 도달한 플레이어 수

N = 전체 스테이지의 개수
stages = 게임을 이용하는 사용자가 현재 멈춰있는 스테이지의 번호가 담긴 배열

-> 실패율이 높은 스테이지부터 내림차순으로 스테이지의 번호가 담겨있는 배열을 return

예전에 실패했던건데
풀긴했지만 풀이가 좀 더럽긴함

import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
class Solution {
    public int[] solution(int N, int[] stages) {
     int[] answer = new int[N];
        int player_num = stages.length;
        HashMap<Integer, Integer> clear_player_map = new HashMap<Integer, Integer>();
        HashMap<Integer, Integer> try_player_map = new HashMap<Integer, Integer>();
        HashMap<Integer, Double> failture = new HashMap<Integer, Double>();
        for (int i = 0; i < N; i++) {
            try_player_map.put(i, 0);
            clear_player_map.put(i, 0);
        }
        for (int i = 0; i < stages.length; i++) {
            for (int j = 0; j < stages[i]; j++) {
                if(j==N) continue;
                try_player_map.put(j, try_player_map.get(j) + 1);
                if (j < stages[i] - 1) {
                    clear_player_map.put(j, clear_player_map.get(j) + 1);
                }

            }
        }
        for (int i = 0; i < N; i++) {
            double f = (try_player_map.get(i) - clear_player_map.get(i)) / (double) try_player_map.get(i);
             if(f!=f)
                 f=0;
            failture.put(i, f);
        }
        List<Integer> keySetList = new ArrayList<>(failture.keySet());
        Collections.sort(keySetList, (o1, o2) -> (failture.get(o2).compareTo(failture.get(o1))));
        int index = 0;
        for (Integer key : keySetList) {
            answer[index++] = key + 1;
        }
        return answer;
    }
}
profile
주니어 개발자

0개의 댓글

관련 채용 정보