알고리즘 풀이/프로그래머스

[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;
	}
}