728x90

실패율 = 도달했으나 클리어하지 못한 유저 수/ 도달한 유저 수

아무도 도달하지 못한 경우 실패율 = 0

전체 스테이지 개수 N 

현재 유저들이 멈춰있는 스테이지 번호가 담긴 배열 stages

실패율이 높은 스테이지부터 내림차순으로 정렬하고 실패율이 같은 경우 스테이지 번호의 오름차순 정렬하여 반환

 

int[] current = new int[N+1];

for (int i = 0; i < stages.length; i++) {

for (int j = 0; j < stages[i]; j++) {

current[j]++;

}

}

각 스테이지별 현재까지 유저들이 지나가거나 멈춰있는 횟수를 담은 배열 current 

 

double[] failure = new double[N];

for (int i = 0; i < failure.length; i++) {

if(current[i]==0)failure[i]=0.0;

else failure[i] = (0.0+current[i]-current[i+1])/current[i];

}

실패율을 double[]로 저장 

만약 도달한 사람이 없다면 (current[i]==0) 실패율은 0.0 

 

Map<Double,ArrayList<Integer>> failureMapR = new HashMap<Double, ArrayList<Integer>>();

for (int i = 0; i < failure.length; i++) {

ArrayList<Integer> list = failureMapR.getOrDefault(failure[i], new ArrayList<Integer>());

list.add(i+1);

failureMapR.put(failure[i], list);

}

 

실패율을 map에 저장 

실패율을 key로 

해당 실패율에 대한 층 수는 중복될 수 있으므로 ArrayList<Integer>를 value로 갖는다. 

 

Arrays.sort(failure);

for (int i = failure.length-1; i >=0; i--) {

ArrayList<Integer> temp = failureMapR.get(failure[i]);

for (int j = 0; j < temp.size(); j++) {

answer.add(temp.get(j));

}

temp.removeAll(temp);

}

failure를 정렬하고 정렬된 배열의 뒷원소부터 map에서 찾아서 층 수를 answer에 저장해준다.

'Java > Coding Test' 카테고리의 다른 글

로또의 최고 순위와 최저 순위 문제 풀이  (0) 2023.10.04
다트 게임 문제 풀이  (0) 2023.10.04
문자열 나누기 문제 풀이  (1) 2023.10.01
대충 만든 자판 문제 풀이  (0) 2023.10.01
모의고사 문제 풀이  (0) 2023.09.30

+ Recent posts