알고리즘 공부/프로그래머스

(Java)프로그래머스 코딩테스트 연습 - 2019 KAKAO BLIND RECRUITMENT - 실패율

HRuler 2020. 11. 10. 22:35

1. 문제

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

 

코딩테스트 연습 - 실패율

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

programmers.co.kr

2. 나의 풀이

import java.util.*;

class Solution {
    public List<Integer> solution(int N, int[] stages) {
        double [] silfaeyul = new double [N];
    	for(int i = 1; i <= N; i = i + 1) {
    		double dodal = 0;
    		double bulhab = 0;
    		for(int j = 0; j < stages.length; j = j + 1) {
    			if(stages[j] >= i) {
    				dodal += 1;
    			}
    			if(stages[j] == i) {
    				bulhab += 1;
    			}
    		}
    		if(bulhab == 0) {
    			silfaeyul[i-1] = 0;
    		}else {
    			silfaeyul[i-1] = bulhab / dodal;
    		}
    	}
    	Map<Integer, Double> imsi = new HashMap<Integer, Double>();
    	for(int i = 0; i < silfaeyul.length; i = i + 1) {
    		imsi.put(i + 1, silfaeyul[i]);
    	}
    	
    	List<Integer> keySetList = new ArrayList<>(imsi.keySet());
    	
    	// 내림차순 정렬
    	Collections.sort(keySetList, (o1, o2) -> (imsi.get(o2).compareTo(imsi.get(o1))));
    	
		
    	return keySetList;
    }
}

3. 다른 사람 풀이

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

class Solution {
    public int[] solution(int N, int[] lastStages) {
        int nPlayers = lastStages.length;
        int[] nStagePlayers = new int[N + 2];
        for (int stage : lastStages) {
            nStagePlayers[stage] += 1;
        }

        int remainingPlayers = nPlayers;
        List<Stage> stages = new ArrayList<>();
        for (int id = 1 ; id <= N; id++) {
            double failure = (double) nStagePlayers[id] / remainingPlayers;
            remainingPlayers -= nStagePlayers[id];

            Stage s = new Stage(id, failure);
            stages.add(s);
        }
        Collections.sort(stages, Collections.reverseOrder());

        int[] answer = new int[N];
        for (int i = 0; i < N; i++) {
            answer[i] = stages.get(i).id;
        }
        return answer;
    }

    class Stage implements Comparable<Stage> {
        public int id;
        public double failure;

        public Stage(int id_, double failure_) {
            id = id_;
            failure = failure_;
        }

        @Override
        public int compareTo(Stage o) {
            if (failure < o.failure ) {
                return -1;
            }
            if (failure > o.failure ) {
                return 1;
            }
            return 0;
        }
    }
}