[프로그래머스] 42889. 실패율
문제 링크
풀이 과정
변수 notClearCnt
는 스테이지에 도달했으나 아직 클리어하지 못한 플레이어의 수를, reachedCnt
는 스테이지에 도달한 플레이어 수를 의미합니다.
각 스테이지별로 stages를 한 번씩 순회하면서 위의 두 변수의 개수를 세고, 실패율을 계산한 뒤, 정렬 기준에 맞게 정렬을 하고, 스테이지 번호를 answer
에 담아 리턴합니다.
코드
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class Main {
public static int[] solution(int N, int[] stages) {
int[] answer = new int[N];
List<Stage> list = new ArrayList<>();
for (int stage = 1; stage <= N; stage++) {
int notClearCnt = 0;
int reachedCnt = 0;
for (int i = 0; i < stages.length; i++) {
if (stages[i] >= stage)
reachedCnt++;
if (stages[i] == stage)
notClearCnt++;
}
if (reachedCnt == 0)
list.add(new Stage(stage, 0));
else
list.add(new Stage(stage, (double) notClearCnt / reachedCnt));
}
Collections.sort(list);
for (int i = 0; i < list.size(); i++) {
answer[i] = list.get(i).stageIdx;
}
return answer;
}
private static class Stage implements Comparable<Stage> {
int stageIdx;
double failPercent;
public Stage(int stageIdx, double failPercent) {
this.stageIdx = stageIdx;
this.failPercent = failPercent;
}
@Override
public int compareTo(Stage o) {
if (this.failPercent == o.failPercent) {
return this.stageIdx - o.stageIdx;
} else {
return Double.compare(o.failPercent, this.failPercent);
}
}
}
public static void main(String[] args) {
solution(5, new int[]{2, 1, 2, 6, 2, 4, 3, 3});
// solution(4, new int[]{4, 4, 4, 4, 4});
}
}
댓글남기기