Coram Deo

[프로그래머스] Lv.1 실패율 본문

알고리즘 공부

[프로그래머스] Lv.1 실패율

탁탁슝 2024. 9. 2. 12:07

1. 나의 풀이(선택정렬 사용)

실패율 구하는 데까지는 시간이 얼마 안걸렸는데,   실패율이 높은 스테이지부터 내림차순으로 스테이지의 번호가 담겨있는 배열을 정렬하는 게 좀 오래걸렸다. 보통 자바에서 정렬할때는 Arrays.sort()를 사용했었는데, 이 문제에서는 인덱스 값을 정렬해야하니 조금 더 복잡했던 것 같다.

class Solution {
    public int[] solution(int N, int[] stages) {
        int[] answer = new int[N];
        int clearUsers = stages.length;
        double[] failureRate = new double[N];
        
        // 실패율 구하기
        for(int i=1; i<=N; i++){
            int notYetClearUsers = 0;
            for(int j=0; j<stages.length; j++){
                if(i == stages[j]) notYetClearUsers++;
            }
            failureRate[i-1] = (double)notYetClearUsers / clearUsers;
            clearUsers = clearUsers - notYetClearUsers;
            System.out.println(failureRate[i-1]);
            answer[i-1] = i;
        }
        
        // 정렬
        for(int i=0; i<N-1; i++){
            for(int j=i+1; j<N; j++){
                if(failureRate[i] < failureRate[j]){
                    double valueTmp = failureRate[i];
                    failureRate[i] = failureRate[j];
                    failureRate[j] = valueTmp;
                    
                    int indexTmp = answer[i];
                    answer[i] = answer[j];
                    answer[j] = indexTmp;
                }else if(failureRate[i] == failureRate[j]){
                    if(answer[i]>answer[j]){
                        int equalTmp = answer[i];
                        answer[i] = answer[j];
                        answer[j] = equalTmp;
                    }
                }
            }
        }
        return answer;
    }
}