프로그래머스 실패율 (Java,자바)

jonghyukLee·2021년 9월 3일
0

이번에 풀어본 문제는
프로그래머스 실패율 입니다.

📕 문제 링크

❗️코드

import java.util.*;
class Stage
{
    int cnt,stay,idx;
    double val;

    public Stage(int cnt,int stay)
    {
        this.cnt = cnt;
        this.stay = stay;
    }
    public Stage(int idx,double val)
    {
        this.idx = idx;
        this.val = val;
    }
    public void addCnt()
    {
        this.cnt++;
    }
    public void addStay()
    {
        this.stay++;
    }
}
class Solution {
    public int[] solution(int N, int[] stages) {
        int[] answer;
        ArrayList<Stage> al = new ArrayList<>();

        for(int i = 0; i <= N+1; ++i) al.add(new Stage(0,0));
        for(int stage : stages) // 2, 1, 2, 6, 2, 4, 3, 3
        {
            if(stage <= N) al.get(stage).addStay();
            while(stage-- > 0) al.get(stage+1).addCnt();
        }
        ArrayList<Stage> answerAl = new ArrayList<>();
        answerAl.add(new Stage(Integer.MAX_VALUE,Integer.MIN_VALUE));
        for(int i = 1; i < al.size(); ++i)
        {
            double stay = al.get(i).stay, cnt = al.get(i).cnt;
            if(stay == 0 || cnt == 0)
            {
                if(i > N) continue;
                answerAl.add(new Stage(i,0.0));
            }
            else
            {
                answerAl.add(new Stage(i,stay/cnt));
            }
        }

        Collections.sort(answerAl,new Comparator<Stage>()
        {
            @Override
            public int compare(Stage o1, Stage o2)
            {
                if(o1.val == o2.val)
                {
                    return o1.cnt - o2.cnt;
                }
                return o2.val > o1.val ? 1: -1;
            }
        });
        answer = new int[N];
        for(int i = 0; i < N; ++i)
        {
            answer[i] = answerAl.get(i).idx;
        }

        return answer;
    }
}

📝 풀이

실패율을 기준으로 내림차순 정렬하는 문제입니다.
각 스테이지 번호를 인덱스로 갖는 ArrayList를 만들어 도전한 인원 수, 머물러있는 인원 수를 카운트합니다.
카운트값 정리를 마쳤으면 주어진 계산식을 통해 계산하고, 그 결과물을 기준으로 내림차순으로 정렬하고 인덱스를 같이 담아주면 되는 간단한 문제입니다.

📜 후기

다음주 코딩테스트를 위해 기출문제를 열심히 풀고있어요!
레벨1로 힐링했으니 다음은 어려운문제 풀어보겠습니다ㅠㅋㅋㅋㅋ

profile
머무르지 않기!

0개의 댓글