끄적끄적 코딩일지

[Programmers]실패율(난이도:★★★★★) 본문

알고리즘

[Programmers]실패율(난이도:★★★★★)

BaekGyuHyeon 2022. 5. 17. 08:58

https://programmers.co.kr/learn/courses/30/lessons/42889

 

코딩테스트 연습 - 실패율

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

programmers.co.kr

import java.util.Arrays;
class Solution {
    public int[] solution(int N, int[] stages) {
        int[] answer = solutionA(N,stages);
        return answer;
    }

    public int[] solutionA(int N, int[] stages){
        int ans[] = new int[N];
        for(int i = 0 ;i < N; i++)
            ans[i] = i+1;
        double[] fails = getFail(N,stages);
        int idx = fails.length -1;
        // 실페율에 따라서 ans[]배열도 정렬
        for(int i = 0 ; i < fails.length;i++){
            for(int j = 0; j < idx;j++){
                if(fails[j] < fails[j+1]){
                    double t = fails[j];
                    fails[j] = fails[j+1];
                    fails[j+1] = t;
                    int tmp = ans[j];
                    ans[j] = ans[j+1];
                    ans[j+1] = tmp;
                }
            }
            idx--;
        }
        return ans;
    }
    // 실페율 구하기
    public double[] getFail(int n,int[] stages){
        double[] arry = new double[n];
        int len = stages.length;
        for(int i = 1; i <= n;i++){
            int count = 0;
            for(int j : stages){
                if(i == j)
                    count++;
            }
            arry[i-1] = (double) count / (double) len;
            len -= count;
        }
        return arry; 
    }
}