관리 메뉴

MOMONOTE

(JAVA) 프로그래머스 실패율 (2019 KAKAO BLIND RECRUITMENT) 본문

알고리즘, 코딩테스트/(JAVA)프로그래머스

(JAVA) 프로그래머스 실패율 (2019 KAKAO BLIND RECRUITMENT)

momo0503 2021. 6. 8. 20:25

 

여러 방법으로 시도해 봤지만 

예전에 풀었던 방식으로 기록해본다. 

9개월전에 참조한 코드라 어느 분의 코드 인지 잘 모르겠따......

 

Comparator 와 copare 메서드를 선언

 

import java.util.*;
//실패율을 저장하기 위해서 stage와 함께 저장해야되기때문에, 실패율을 정렬할때 실패율이 같은경우에
//는 스테이지가 작은거부터출력해야되고, 정렬한 이후 출력해야하는 답이 실패율이 아니라 스테이번호기때 때문에 class 선언



class Solution {
	
	   class Fail{
        int stage;
        double rate;
        
        Fail(int stage, double rate){
            this.stage =stage; this.rate =rate;
        }
    }
 
    
    Comparator<Fail> comp = new Comparator<Fail>(){//compare 을위한 Comaparator 객체선언
    
        public int compare(Fail a, Fail b){//compare 메서드를 구현해야함
            if(a.rate < b.rate){
                return 1;
            }else if( a.rate> b.rate){
                return -1;
            }else{ //실패율이 같은경우
                if(a.stage >b.stage){
                    return 1;
                }else if(a.stage <b.stage){
                    return -1;
                }else {
                	return 0;
                }
            }
        }
    
    };
    
    
    public int[] solution(int N, int[] stages) {
        int[] answer = new int[N];
        List<Fail> fails = new ArrayList<Fail>();
        int total = stages.length;//전체 사용자 명수
        
        //스테이지를 순회하면서 각스테이지에 도달한 사용자를 세고, 그값을 한 배열에 저장
        //배열의 크기는 스테이지개수보다 하나 더많음.
        int[] users = new int[N+1];
        for(int s : stages){
            users[s-1]++;   //1번스테이지에있는 사용자수는 0번인덱스에있음.
        }

        //users 를 순회하면서 각각의 스테이지에 실패율을 구하겠다.
        for(int i=0 ;i<N;i++){
            if(users[i]==0) fails.add(new Fail(i+1,0)); //user[i]==0 첫번쨰스테이지에 도달한 사용자수 //값이 0이면 무조건 실패율을 0으로하도록 되어있다.
            else{
                fails.add(new Fail(i+1,(double)users[i]/total ));
                    total= total-users[i];
            }            
        }
        //for문을 다돌면 각각의 스테이지의 실패율이 다구해진다.fails에 저장됨
        
        Collections.sort(fails, comp);
        for(int i=0; i<N;i++){
            answer[i] = fails.get(i).stage;
        }
        
        
        
        return answer;
    }
}

- compare 메서드에서 

- 음수 또는 0이면 객체의 자리가 그대로 유지되며, 양수인 경우에는 두 객체의 자리가 변경된다. 

Comments