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

 

코딩테스트 연습 - 실패율

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

programmers.co.kr

import java.util.*;

class Solution {
    public int[] solution(int N, int[] stages) {
        int[] answer = new int[N];
        double[] fr = new double[N];	// 실패율 저장, 배열의 '인덱스+1' 은 스테이지
        double[] ascFr = new double[N];	// 오름차순 실패율
        
        for (int i = 0; i < answer.length; i++) {
        	int curStage = i+ 1;	// 검사대상 스테이지
        	int son = 0;	// 분자
        	int mom = 0;	// 분모
			for (int j = 0; j < stages.length; j++) {
				if(stages[j] >= curStage) {
					mom++;
					if(stages[j] == curStage) {
						son++;
					}
				}				
			}
			if(mom == 0) mom = 1;	// 분모가 0이면 안됨
			
			double failureRate = son / (double) mom;	// 실패율 계산
			
			fr[i] = failureRate;	// 실패율
			ascFr[i] = failureRate;	// 오름차순 실패율
		}        
        	Arrays.sort(ascFr);	// 실패율 오름차순 정렬
        
        for (int i = ascFr.length - 1; i >= 0; i--) {	// '실패율 배열 - 오름차순 실패율 배열' 매핑시켜서 스테이지를 찾음
			for (int j = 0; j < fr.length; j++) {
				if(ascFr[i] == fr[j]) {	
					answer[(ascFr.length - 1) - i] = j+1;	// 스테이지 기록
					fr[j] = -1;	// 찾은 실패율은 -1로 해서 또 안찾도록
					break;
				}
			}			
		}
        return answer;
    }
}