[Java] Programmers - 실패율

최혜원·2021년 12월 28일
0

Programmers - 실패율

풀이

먼저 스테이지 번호와 실패율이 담긴, 실패율을 내림차순으로 하는 객체를 생성해주었다. 그리고 실패율을 계산하여 list에 넣어 정렬된 스테이지 번호를 answer 배열에 넣어 출력해주었다.

막혔던 부분은 실패율을 구하는 과정에서 0을 나눌때 에러가 발생하여 5문제 정도 실패가 떴다. 따라서 스테이지에 도달했으나 아직 클리어하지 못한 플레이어의 수가 0일 때 예외처리를 해주었다.

            if(user[i]==0){
                list.add(new Stage(i+1,0.0));
            }else{
                double fail = (double) user[i]/sum;
                list.add(new Stage(i+1,fail));
            }

소스코드

import java.util.*;
class Solution {
    static class Stage implements Comparable<Stage>{
        // 스테이지 번호, 실패율  
        int num;
        double fail;
        public Stage(int num,double fail){
            this.num = num;
            this.fail = fail;
        }
        @Override
        public int compareTo(Stage o){
            if(o.fail - this.fail > 0)
                return 1;
            else if(o.fail == this.fail)
                return this.num - o.num;
            else
                return -1;
        }
    }
    public int[] solution(int N, int[] stages) {
        int[] answer = new int[N];
        int[] user = new int[N+1];
        List<Stage> list = new ArrayList<>();
        for(int i=0; i<stages.length; i++){
            user[stages[i]-1]++;
        }
        
        for(int i=0; i<N; i++){
            int sum = 0;
            for(int j=i; j<N+1; j++){
                sum += user[j];
            }
            if(user[i]==0){
                list.add(new Stage(i+1,0.0));
            }else{
                double fail = (double) user[i]/sum;
                list.add(new Stage(i+1,fail));
            }
            
        }
        
        Collections.sort(list);
        
        for(int i=0; i<N; i++){
            answer[i] = list.get(i).num;
        }
        
        return answer;
    }
}

결과

정확성테스트
테스트 1통과 (0.46ms, 70.5MB)
테스트 2통과 (0.65ms, 74.6MB)
테스트 3통과 (3.56ms, 80.8MB)
테스트 4통과 (3.07ms, 75.5MB)
테스트 5통과 (7.15ms, 89.4MB)
테스트 6통과 (0.96ms, 72.8MB)
테스트 7통과 (1.33ms, 82.1MB)
테스트 8통과 (3.42ms, 86.1MB)
테스트 9통과 (4.26ms, 90.6MB)
테스트 10통과 (2.73ms, 79.5MB)
테스트 11통과 (3.77ms, 79.3MB)
테스트 12통과 (2.86ms, 87.7MB)
테스트 13통과 (3.78ms, 86.7MB)
테스트 14통과 (0.41ms, 77MB)
테스트 15통과 (2.55ms, 87.4MB)
테스트 16통과 (1.15ms, 74.2MB)
테스트 17통과 (2.00ms, 81.6MB)
테스트 18통과 (1.13ms, 81.8MB)
테스트 19통과 (0.57ms, 79.6MB)
테스트 20통과 (1.60ms, 74.2MB)
테스트 21통과 (4.10ms, 75.5MB)
테스트 22통과 (4.02ms, 84.3MB)
테스트 23통과 (3.93ms, 95MB)
테스트 24통과 (3.55ms, 84.8MB)
테스트 25통과 (0.41ms, 76.4MB)
테스트 26통과 (0.32ms, 78.3MB)
테스트 27통과 (0.44ms, 75.8MB)
profile
멋쟁이 개발자가 될꺼야

0개의 댓글