ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Level1) 실패율
    PS/programmers 2021. 3. 16. 21:23
    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
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    import java.util.Arrays;
    import java.util.Comparator;
     
    /*
     1 <= N <= 500 (스테이지번호)
     1 <= stages.length <= 200,000 (사람수)
     1 <= stages.val <= N+1 (실패한 스테이지)
     N+1 은 마지막까지 클리어했다는 뜻
     실패율이 높은순서로 정렬, 실패율이 같다면 낮은 라운드부터 정렬
     */
     
    class Stage {
        int stage;
        double failure;
     
        public Stage(int stage, double failure) {
            this.stage = stage;
            this.failure = failure;
        }
    }
     
    public class Level1_실패율 {
        public static int[] solution(int N, int[] stages) {
            int[] ans = new int[N];
     
            // 총 시도한 사람 수
            int people = stages.length;
     
            // 각 스테이지에서 실패한 사람 수 구하기
            int[] failPersonCountForStage = new int[N+2];
            for (int stage : stages) {
                failPersonCountForStage[stage]++;
            }
     
            // 각 스테이지에 대한 실패율 구하기
            double[] failure = new double[N+2];
            for (int i = 1; i < N+1; i++){
                if (people == 0) {
                    failure[i] = 0;
                } else {
                    failure[i] = (double) failPersonCountForStage[i] / people;
                }
                people -= failPersonCountForStage[i];
            }
     
            // ans1. 실패율이 높은 순서대로 스테이지 번호를 정렬
            // ans2. 실패율이 같다면 스테이지 번호가 낮은 순서로 정렬
            Stage[] stage = new Stage[N];
            for (int i = 0; i < stage.length; i++){
                stage[i] = new Stage(i+1, failure[i+1]);
            }
     
            Arrays.sort(stage, new Comparator<Stage>() {
                @Override
                public int compare(Stage s1, Stage s2){
                    return Double.compare(s2.failure, s1.failure);
                }
            });
     
            for(int i = 0; i < ans.length; i++){
                ans[i] = stage[i].stage;
            }
     
            return ans;
        }
     
        public static void main(String[] args) {
            int[] stages = {21262433};
            int N = 5;
            int[] solution = solution(N, stages);
            for (int a : solution) {
                System.out.print(a + " ");
            }
        }
    }
    cs

    'PS > programmers' 카테고리의 다른 글

    Level1) 다트게임  (0) 2021.04.27
    Level1) 비밀지도  (0) 2021.03.17
    Level1) 예산  (0) 2021.03.16
    Level2) 전화번호 목록  (0) 2021.01.08
    Level2)가장 큰 수  (0) 2020.11.10
킹수빈닷컴