import java.util.ArrayList;
import java.util.Collections;
class Solution {
public int[] solution(int N, int[] stages) {
int[] answer = new int[N];
// 나중에 실패율을 저장할 배열
double[] stage = new double[N + 1];
// 특정스테이지를 뚫지 못한 인원/전체인원 -> 똑같지만 인덱스 저장
// -> stage[N+1]한 이유 -> 다 클리어 한 사람 제외
for (int i : stages) {
if (i == N + 1) {
// stages의 값이 N+1 일 경우 다 클리어한 사람 -> 제외
continue; // continue
}
// stages의 값들은 1부터 시작하여 N+1까지 값을 가지고 있음.
// 0스테이지는 없기 때문에 stage[0]은 0이 되어야 함.
stage[i]++;
}
double num = stages.length; // num은 게임을 하는 전체 인원
// 각 스테이지에 머물러 있는 인원들(tmp)를 계속 빼줘야 함
double tmp = 0; // tmp 각 스테이지에 머물러 있는 인원들(그 스테이지를 못 깬 사람)
ArrayList<Double> fail = new ArrayList<Double>();
// 실패율이 높은 순으로 정렬하기 위해 ArrayList 사용
for (int i = 1; i < stage.length; i++) {
tmp = stage[i];
if (num == 0) { // 어떤 스테이지에 도전할 사람이 없는 경우
// 예) 8명의 사람들과, 총 5개의 스테이지에서
// 1~4 스테이지에 8명 전부가 머무르고 있을 때
// num는 0이 된다. 0/0은 계산이 되지 않는다.
// 게임을 하는 전체 인원이 0이 되므로 실패율은 0이 되어야 한다.
stage[i] = 0;
} else {
stage[i] = stage[i] / num; // stage[i]에 값을 넣어준다.
// -> 이유는 index를 저장하기 위해
num = num - tmp; // 각 스테이지에 머문 인원들을 빼준다.
}
fail.add(stage[i]); // 순서를 높은 순으로 정렬하기 위해 fail에 넣어준다.
}
Collections.sort(fail, Collections.reverseOrder());
// 내림차순 정렬 시행
for (int i = 0; i < fail.size(); i++) {
for (int j = 1; j < stage.length; j++) { // 1부터 시작하는 이유는 0스테이지는 없기 때문
if (fail.get(i) == stage[j]) { // stage의 순서는 바뀌지 않았다. 인덱스만 사용하자
answer[i] = j; // answer[i] 에 stage[j]의 인덱스인 j(순서)를 넣어준다.
stage[j] = -1; // 그 stage[j]의 값은 -1으로 만들어 값을 변경시켜줘야 한다.
break; // 만약 실패율이 같을 경우 작은 번호의 스테이지가 먼저 들어가야 하므로
// break가 없다면 그 다음으로 넘어가면서 answer[i]의 값이 변하게 된다.
}
}
}
return answer;
}
}
-> 고민을 많이 했었던거 같다.
-> 답안을 보고 풀이에 대해 많은 의문점이 있어 주석을 달면서 정리해보았다.
public class Failure {
public static void main(String[] args) {
Solution solution = new Solution();
System.out.println(Arrays.toString(solution.solution(5, new int[] { 2, 1, 2, 4, 2, 4, 3, 3 })));
}
}
-> num이 0이 되는 예제이다.
--> 도움을 주신 분
https://sujin-k.tistory.com/61
[JAVA] 프로그래머스 Lv1. 실패율
programmers.co.kr/learn/courses/30/lessons/42889 코딩테스트 연습 - 실패율 실패율 슈퍼 게임 개발자 오렐리는 큰 고민에 빠졌다. 그녀가 만든 프랜즈 오천성이 대성공을 거뒀지만, 요즘 신규 사용자의 수가
sujin-k.tistory.com
'코딩테스트 문제풀이' 카테고리의 다른 글
프로그래머스 (3진법 뒤집기) (0) | 2021.09.28 |
---|---|
프로그래머스 (약수의 개수) (0) | 2021.09.27 |
프로그래머스 (폰켓몬) (0) | 2021.09.21 |
프로그래머스 (크레인 인형뽑기 게임) (0) | 2021.09.20 |
프로그래머스 (완주하지 못한 선수) (0) | 2021.09.15 |