Algorithm

[Programmers] 실패율

프로그래민 2020. 8. 3. 00:09
반응형

간단한 시뮬레이션 문제였다.

이 문제의 경우 for문을 이용한 간단한 문제였지만 최악의 경우가 200,000 * 500 이므로 일중 for문 안에 해결을 해야한느 문제였다. 정렬을 필요로 하는 문제였기에 priortyqueue를 사용하였고, Pos 클래스를 만들어 comprable을 상속받아 compareTo함수를 구현하였다. 이 문제에서는 주의할것이 있었다. 바로 0으로 나누는 경우인데, 보통의 경우 0으로 나누면 Exception뜨게 된다. 하지만 캐스팅을 한경우 별도의 Exception 없이 infinty나 NaN이 뜨게 된다.

항상 0으로 나누는 것은 예외처리를 다시한번 봐주는 습관을 길러야 한다.

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
package programmers;
 
import java.util.Arrays;
import java.util.PriorityQueue;
 
public class Solution_2019카카오_실패율 {
    static class Pos implements Comparable<Pos>{
        int num;
        double rate; 
        Pos (int n,double r){
            num=n;rate=r;
        }
        @Override
        public int compareTo(Pos o) {
            if(rate == o.rate) {
                return Integer.compare(num, o.num);
            }else {
                return -Double.compare(rate, o.rate);
            }
        }
    }
    
    public static void main(String[] args) {
        int N=5;
        int[] stages = {2,1,2,6,2,4,3,3};
        System.out.println(Arrays.toString(solution(N,stages)));
    }
 
    static int[] solution(int N, int[] stages) {
        PriorityQueue<Pos> pq =new PriorityQueue<>();
        int[] count = new int[N+2];
        
        int sum=0;
        
        for(int i=0;i<stages.length;i++) {
            int num=stages[i];
            count[num]+=1;
        }
        System.out.println(Arrays.toString(count));
        
        sum+=count[N+1];
        
        for(int i=N;i>=1;i--) {
            int cur=count[i];
            
            sum+=cur;
            
            if(cur==0 && sum ==0)
                pq.add(new Pos(i, 0));
            else
                pq.add(new Pos(i, (double)cur/sum));
        }
        
        int[] answer= new int[N];
        int index=0;
        
        while(!pq.isEmpty()) {
            answer[index++]=pq.poll().num;
        }
        
        return answer;
    }
    
    
}
 
                                                                      
반응형

'Algorithm' 카테고리의 다른 글

[BOJ] 1931. 회의실배정  (0) 2020.08.08
[Programmers] 추석 트래픽  (0) 2020.08.07
[Programmers] 입국심사  (0) 2020.07.30
[Programmers] 스킬트리  (0) 2020.07.30
[BOJ] 4889. 안정적인 문자열  (0) 2020.07.26