+1 2019 KAKAO BLIND RECRUITMENT 실패율

이동한·2023년 6월 19일
0

알고리즘 기출

목록 보기
14/22
import java.util.*;

class Solution {
    static class Rate{
        int idx;
        double rate;
        public Rate(int idx, double rate){
            this.idx = idx;
            this.rate = rate;
        }
    } 
        
    public int[] solution(int N, int[] stages) {
        int[] failCnt = new int[N+1];
        int[] passCnt = new int[N+1];
        // failCnt, passCnt 갱신
        for(int el : stages){
            if(el>N){
                for(int i=1; i<el; i++){
                 passCnt[i]+=1;
                }
                continue;
            }
            failCnt[el]+=1;
            for(int i=1; i<=el; i++){
                passCnt[i]+=1;
            }
        }
        List<Rate> rates = new ArrayList<>();
        for(int i=1; i<N+1; i++){
            if(failCnt[i] == 0){
                Rate rate = new Rate(i,0);
                rates.add(rate);
                continue;
            }
            Rate rate = new Rate(i,(double)failCnt[i]/passCnt[i]);
            rates.add(rate);
        }
        Collections.sort(rates,(o1,o2)->Double.compare(o2.rate,o1.rate));
        int[] ans = new int[N];
        for(int i=0; i<ans.length; i++){
            ans[i] = rates.get(i).idx;
        }
        for(Rate curRate : rates){
            System.out.println("Idx = "+curRate.idx+" rate = "+curRate.rate);
        }
        System.out.print("fails = ");
        for(int el : failCnt){
            System.out.print(el+" ");
        }
        System.out.println();
        
        System.out.print("pass = ");
        for(int el : passCnt){
            System.out.print(el+" ");
        }
        System.out.println();
        return ans;
    }
}

구조가 있는 경우 객체를 선언해서 처리하자 -> Rate class 정의

두번째

import java.util.*;
import java.util.stream.Collectors;

class Solution {
    class StageInfo implements Comparable{
        public int stageNum = 0;
        public int arrived=0;
        public int notCleared = 0;
        
        public StageInfo(int stageNum){
            this.stageNum = stageNum;
        }

        @Override
        public int compareTo(Object o){
            StageInfo s = (StageInfo) o;
            if(this.getRatio() > s.getRatio()) return -1;
            else if(this.getRatio() == s.getRatio()){
                return this.stageNum - s.stageNum;
            }else{
                return 1;
            }
        }
        public double getRatio(){
            if(arrived ==0) return 0;
            return (double) notCleared / (double) arrived;
        }    
    }
    
    public int[] solution(int N, int[] stages) {
        List<StageInfo> list = new ArrayList<>();
        // stage 리스트 초기화
        for(int i=0; i<N; i++){
            list.add(new StageInfo(i+1));
        }
        int listSize= list.size();
        
        for(int stage : stages){
            if (stage == N+1){
                for(int i=0; i<list.size(); i++){
                    StageInfo cur = list.get(i);
                    cur.arrived+=1;
                }
                continue;
            }
            
            for(int i=0; i<stage;i++){
                StageInfo cur = list.get(i);
                cur.arrived+=1;
                if(i == stage-1) cur.notCleared +=1;
            }
        }
        
        Collections.sort(list);
        int[] answer = new int[listSize];
        for(int i=0; i<listSize; i++){
                answer[i] = list.get(i).stageNum;
        }
        
        return answer;
    }
}

Comparable.compareTo(Object o) 반환값:
a>b 일때 양수 반환: 오름차순
음수 반환: 내림차순

profile
Pragmatic, Productive, Positivist

0개의 댓글