프로그래머스 문제 - 실패율

JUNWOO KIM·2024년 3월 14일
0

알고리즘 풀이

목록 보기
86/105

프로그래머스 실패율 문제 풀이를 진행하였습니다.

문제 해석

문제를 읽으면 아래와 같은 해석이 가능합니다.

게임의 스테이지 갯수와 플레이어가 게임을 플레이하여 도달한 위치값이 주어집니다.
각 스테이지별로 실패율을 구하고 실패율이 높은 스테이지부터 내림차순으로 정렬 후 return해야 합니다.

문제 풀이

새로운 배열에 index스테이지까지 도달한 플레이어의 수를 차례대로 저장해줍니다.
이후 또 다른 배열에 실패율을 입력해주고 정렬하면 되는데 각 스테이지의 실패율은 (스테이지에 도달했으나 아직 클리어하지 못한 플레이어의 수 / 스테이지에 도달한 플레이어 수)로 계산이 가능하며 이를 가지고 내림차순으로 정렬하면 답을 구할 수 있습니다.

전체 코드

import java.util.*;

class Solution {
    public int[] solution(int N, int[] stages) {
        int[] answer = new int[N];
        float[] stageSuccessRate = new float[N+2];
        int[] stageSuccessCount = new int[N+2];
        Integer[] result = new Integer[N];
        int playerNum;
        //스테이지 승리 횟수 저장
        for(int i = 0; i < stages.length; i++)
        {
            stageSuccessCount[stages[i]]++;
        }
        playerNum = stages.length;  //전체 플레이어 수
        //스테이지의 실패율 계산
        for(int i = 1; i < N+1; i++)
        {
            result[i-1] = i;
            if(stageSuccessCount[i] > 0)
            {
                stageSuccessRate[i] = (float)stageSuccessCount[i] / (float)playerNum;
                playerNum -= stageSuccessCount[i];
            }
        }
        //실패율을 기준으로 내림차순 정렬
        Arrays.sort(result, new Comparator<Integer>() {
            @Override
            public int compare(Integer i1, Integer i2) {
                if(stageSuccessRate[i2] - stageSuccessRate[i1] == 0 && i2 > i1) //승률이 낮으면 스테이지가 적은 곳으로
                    return -1;
                if(stageSuccessRate[i2] - stageSuccessRate[i1] < 0)
                    return -1;
                else
                    return 1;
            }
        });
        for(int i = 0; i < N; i++)
        {
            answer[i] = result[i];
        }
        
        return answer;
    }
}

출저
https://school.programmers.co.kr/learn/courses/30/lessons/92334

profile
게임 프로그래머 준비생

0개의 댓글