티스토리 뷰

programmers.co.kr/learn/courses/30/lessons/42889#

 

코딩테스트 연습 - 실패율

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

programmers.co.kr

 

 

 

 

import java.util.*;

class Solution {
    public int[] solution(int N, int[] stages) {
        int[] answer = new int[N];
        
        // stage 별로 실패율을 담을 map
        Map<Integer, Double> failMap = new HashMap<>();
        
        Arrays.sort(stages);
        
        // stages를 담을 deque
        Deque<Integer> deq = new ArrayDeque<Integer>();
        for(int stage : stages) {
            deq.add(stage);
        }

        for(int i=1; i<=N; i++) {
            
            int cnt = 0;
            int size = deq.size();
            
            while(deq.peekFirst() != null && deq.peekFirst() == i) {
                deq.remove(i);
                cnt++;
            }
            
            double rate = (double) cnt / size;
            
            // 아무도 도달하지 못한 stage의 경우!
            if(Double.isNaN(rate)){
                rate = 0.0;
            }
            //if(size == 0 && !deq.contains(i))
              //  failMap.put(i, 0.0);
            
            failMap.put(i, rate);
        }
        
        // 실패율 내림차순으로 key 정렬하기
        List<Integer> stageList = new ArrayList<>();
        stageList.addAll(failMap.keySet());
        
        Collections.sort(stageList, new Comparator() {
           
            public int compare(Object o1, Object o2) {
                Object v1 = failMap.get(o1);
                Object v2 = failMap.get(o2);
                
                return ((Comparable) v2).compareTo(v1);
            }
        });
        
        for(int i=0; i<answer.length; i++)
            answer[i] = stageList.get(i);
        
        return answer;
    }
}

 

아무도 도달하지 못한 stage를 고려하기 위해 테스트 케이스에 8, [1,2,3,4,5,6,7], [7,6,5,4,3,2,1,8] 추가함

최근에 올라온 글
«   2024/07   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
Total
Today
Yesterday