성능 요약
메모리: 78.8 MB, 시간: 0.67 ms
구분
코딩테스트 연습 > 2019 KAKAO BLIND RECRUITMENT
Answer Code1(23.01.26)
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;
}
}
}
문제풀이
-
실패율이 높은 stage부터 내림차순으로 stage의 번호가 담겨있는 배열을 출력하는 문제이다.
-
실패율 =
stage에 도달했으나 아직 클리어하지 못한 플레이어의 수
/stage에 도달한 플레이어 수
-
실패율을 구한 다음 내림차순으로 정렬하여 반환하는 것이 목표다.
-
흐름 구성
-
각 스테이지에 머무르고 있는 사람의 수를 카운팅한다.
-
각 스테이지를 플레이한 사람의 수를 카운팅한다.
-
각 (스테이지에 머무르고 있는 사람 / 각 스테이지를 플레이 한 사람) * 100으로 실패율을 계산한다.
-
실패율 순으로 정렬하여 스테이지의 번호를 반환한다.
-
-
중요한 조건
-
실패율이 같을 경우 스테이지가 작은 번호가 우선
-
스테이지에 도달한 유저가 없는 경우 해당 스테이지의 실패율은 0
-
Review
- 해당 문제는 빠른 시일 내로 다시 풀어보자.