Hayden's Archive
[알고리즘] 프로그래머스 : 실패율 본문
알고리즘 문제 출처 : programmers.co.kr/learn/courses/30/lessons/42889
내가 작성한 코드
실컷 잘 풀어놓고 제출하는데 런타임 에러가 터졌다. 당황해서 다시 코드를 살펴보니 스테이지에 도달한 유저가 없는 경우 실패율(스테이지에 도달했으나 아직 클리어하지 못한 플레이어의 수 / 스테이지에 도달한 플레이어 수)에서 스테이지에 도달한 플레이어 수가 0이 되고 0이 분모가 되어버리는 것을 발견했다. 따라서 조건문으로 0이 아닌 경우에만 실패율을 구하도록 코드를 수정하니 통과~!
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
class Solution {
public int[] solution(int N, int[] stages) {
int[] answer = new int[N];
double[] countStage = new double[N];
for(int i=0; i<stages.length; i++) {
if(stages[i] == (N+1)) continue;
countStage[stages[i]-1]++;
}
int totalPeople = stages.length;
Map<Double, List<Integer>> map = new HashMap<>();
for(int i=0; i<countStage.length; i++) {
double thisStagePeople = countStage[i];
if(totalPeople != 0) {
countStage[i] /= totalPeople;
}
List<Integer> list = new ArrayList<>();
if(map.get(countStage[i]) != null) {
list = map.get(countStage[i]);
}
list.add(i+1);
map.put(countStage[i], list);
totalPeople -= thisStagePeople;
}
Arrays.sort(countStage);
int index = 0;
for(int i=countStage.length-1; i>=0; i--) {
if(i<countStage.length-1 && countStage[i] == countStage[i+1]) {
continue;
}else {
List<Integer> list = map.get(countStage[i]);
for(int j=0; j<list.size(); j++) {
answer[index] = list.get(j);
index++;
}
}
}
return answer;
}
}