알고리즘 풀이/프로그래머스

[프로그래머스][Java] 실패율

배게 2019. 2. 21. 16:23
728x90

Fail클래스를 따로 선언하여 stage와 실패율 2개 변수를 저장함


stage에 따른 users를 for문으로 따로 저장해주고


실패율을 계산해줌


comparator클래스를 활용해


실패율이 높은 순으로 정렬하고, 실패율이 같은 경우에는


stage가 낮은 순으로 정렬한다


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
78
79
80
81
82
import java.util.*;
class Solution {
    static class Fail{
        int stage;
        double rate;
        Fail(int stage,double rate){
            this.stage = stage;
            this.rate = rate;
        }
    }

    public int[] solution(int N, int[] stages) {
        int[] answer = new int[N];

        Arrays.sort(stages);
        int index  = 1;
        int numP = stages.length;
        int numI = 0;

        List<Fail> fails = new ArrayList<Fail>();

        int[] users = new int[N+1];
        int total = stages.length;

        for (int s : stages) {
            users[s-1]++;
        }

        for (int i : users) {
            System.out.println(i);
        }

        for(int i=0; i<N; i++) {
            if(users[i]==0) {
                fails.add(new Fail(i+1,0));
            }
            else {
                fails.add(new Fail(i+1,(double)users[i]/total));
                total-=users[i];
            }
        }

        for (Fail i : fails) {
            System.out.println(i.rate);
        }

        Comparator<Fail> comp = new Comparator<Fail>() {

            @Override
            public int compare(Fail a, Fail b) {
                // TODO Auto-generated method stub
                if(a.rate < b.rate) {
                    return 1;
                }
                else if(a.rate > b.rate) {
                    return -1;
                }
                else {
                    if(a.stage>b.stage) {
                        return 1;
                    }
                    else if(a.stage<b.stage) {
                        return -1;
                    }
                }
                return 0;
            }
        };

        Collections.sort(fails,comp);

        // 이게 어떤식으로 sorting이 되는지 알아야함
        // 아니면 해쉬맵을 이용해야하나또? 그래서 

        for (int i = 0; i < N; i++) {
            answer[i]=fails.get(i).stage;
        }

        return answer;
    }
}



참고 : https://www.youtube.com/watch?v=hmHparvw4Wo