실패율

Seongjin Jo·2023년 3월 1일
0

프로그래머스 LV1

목록 보기
25/31

문제

풀이

import java.util.*;
class Solution {
    public int[] solution(int N, int[] stages) {
        int[] answer = new int[N];
        Map<Integer,Double> map = new HashMap<>();
        
        for(int i=1; i<=N; i++){
            int cnt=0,num=0;
            for(int j=0; j<stages.length; j++){
                if(stages[j] >= i) cnt++;
                if(stages[j] == i) num++;
            }
            if(cnt==0 && num==0) cnt=1;
            double fail = (double) num/cnt;
            map.put(i,fail);
        }
        
        //내림차순 정렬.
        for(int i=0; i<N; i++){
            double max = -1;
            int key=0;
            for(int x : map.keySet()){
                if(max < map.get(x)){
                    max = map.get(x);
                    key = x;
                }
            }
            answer[i] = key;
            map.remove(key);
        }
        return answer;
    }
}
  1. 일단 실패율을 실수형으로 만들고 그 level에 대한 실패율을 담을 map을 만들어서 담는다. 이 때 실패율을 구하는 cnt,num 둘다 없는 경우에는 실패율이 없으므로 1을 저장한다.
  2. map.ketSet()을 이용하여 순회하면서 map에 정렬되어있는 값들 중 최대값들을 answer[i]에 저장시킨다. 그리고 map.remove()로 기록한 map의 키는 삭제.

처음에 level과 실패율을 가지는 객체를 하나 만들어서 Comparable<>로 편하게 풀려고했는데 타입이 달라서 에러가 뜨더라..

0개의 댓글