본문 바로가기

PS

실패율 [프로그래머스]

1) 문제 접근 방법

- 각 스테이지마다, 해당 스테이지에 도달한 값을 카운트해주고,

  그 다음에 해당 스테이지보다 크거나 같은 값을 total에 더해준 후에,

  두 값으로 실패율을 구해서 ArrayList에 저장한다. 

- ArrayList에 저장할 때는, 인덱스와 실패율을 Pair로 만들어서 저장한다. 

- 그 다음에 실패율을 기준으로 내림차순 정렬을 하기 위해서,

  Collecitons.sort(arr, (o1, o2) -> Double.compare(o2.rate, o1.rate));를 해준다. 

 

- 여기서 중요한 것이, 스테이지에 도달한 유저가 없는 경우에는, 해당 스테이지의 실패율은 0으로 정의해야 하는데,

  이 케이스를 따로 분리해줘야 한다.

- 그 다음에 내림차순 정렬 순서의 인덱스를 결과에 저장해준다.  

import java.util.*;

// 인덱스와 실패율을 저장하기 위한 Pair 클래스를 선언합니다. 
class Pair{
    
    int idx;
    double rate;
    
    public Pair(int idx, double rate){
        this.idx = idx;
        this.rate = rate; 
    }
}

class Solution {
    
    
    
    public int[] solution(int N, int[] stages) {
        int[] answer = new int[N];
        
        ArrayList<Pair> arr = new ArrayList<>(); 
        
        int curr = 1;
        
        while(true){
            if(curr == N+1){
                break;
            }
            
            int cnt = 0;
            int total = 0; 
            
            // 현재 스테이지에서의 도달했으나 클리어하지 못한 플레이어의 수 cnt와
            // 스테이지에 도달한 플레이어의 수 total을 각각 구해준다. 
            for(int i=0; i<stages.length; i++){
                if(stages[i] == curr){
                    cnt++;
                }
                if(stages[i] >= curr){
                    total++;
                }
            }
            
            // System.out.println("cnt, total은?" + cnt + " " + total);
            double rate = 0;
            // total이 0인 경우는, 스테이지에 도달한 유저가 없는 경우이므로
            // 실패율을 0으로 정의한다. 
            // 반대로 total이 아닌 경우는 cnt, total을 double로 변환해서
            // rate에 저장한다. 
            if(total == 0){
                rate = 0;
            }else{
                rate = (double)cnt/(double)total;
            }
           
            // arr에 Pair를 추가한다. 
            arr.add(new Pair(curr, rate));
            
            // 다음 스테이지로 이동한다. 
            curr++; 
        }
        
        // Collections를 rate 기준으로 내림차순 sort해준다. 
        Collections.sort(arr, (o1, o2) -> Double.compare(o2.rate, o1.rate));
        
        // answer에 최종적으로 내림차순 정렬된 값을 저장한다. 
        for(int i=0; i<arr.size(); i++){
            // System.out.println("idx, rate" + arr.get(i).idx + " " + arr.get(i).rate);
            answer[i] = arr.get(i).idx; 
        }
        
        return answer;
    }
}

'PS' 카테고리의 다른 글

뉴스 클러스터링 [프로그래머스]  (0) 2023.06.03
다트 게임 [프로그래머스]  (1) 2023.06.03
오픈채팅방 [프로그래머스]  (0) 2023.06.03
알파벳 [BOJ 1987]  (0) 2022.10.10
테트로미노 [BOJ 14500]  (0) 2022.10.08