알고리즘 풀이/프로그래머스
[level1] 프로그래머스 - 실패율(JAVA)
데롱디롱
2021. 8. 27. 02:04
728x90
- player[ 스테이지번호 -1 ][ 머물러있는 플레이어 수 ] : 각 스테이지에 몇명의 플레이어가 있는지를 저장
- low_stage : 내 앞 단계까지의 플레이어 수의 합
- people - low_stage : 전체 플레이어 수 - 앞 단계에 있는 플레이어 수
=> 스테이지에 도달한 플레이어 수를 알 수가 있음
import java.util.Arrays;
class Solution {
public int[] solution(int N, int[] stages) {
int[] answer = new int[N];
double player[][] = new double[N][2];
for (int i = 0; i < N; i++)
player[i][0] = i + 1; // 스테이지 번호
int people = stages.length; // 총 플레이어 수
for (int i = 0; i < people; i++) {
if (stages[i] <= N)
player[stages[i] - 1][1]++; // 머물러있는 사람 수 증가
}
int low_stage = 0; // 아직 도달하지 못한 사람 수
for (int i = 0; i < N; i++) {
double temp = player[i][1];
player[i][1] = player[i][1] / (people - low_stage); // 실패율
low_stage += temp;
if (low_stage == people)
break;
}
Arrays.sort(player, (o1, o2) -> {
if (o1[1] == o2[1])
return Double.compare(o1[0], o2[0]); // 실패율 같으면 번호 오름차순
return -Double.compare(o1[1], o2[1]); // 실패율 내림차순
});
for (int i = 0; i < N; i++)
answer[i] = (int) player[i][0];
return answer;
}
}