[프로그래머스] 42889. 실패율

1 분 소요

문제 링크

[프로그래머스] 42889. 실패율


풀이 과정

변수 notClearCnt 는 스테이지에 도달했으나 아직 클리어하지 못한 플레이어의 수를, reachedCnt 는 스테이지에 도달한 플레이어 수를 의미합니다.

각 스테이지별로 stages를 한 번씩 순회하면서 위의 두 변수의 개수를 세고, 실패율을 계산한 뒤, 정렬 기준에 맞게 정렬을 하고, 스테이지 번호를 answer 에 담아 리턴합니다.


코드

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class Main {
    public static int[] solution(int N, int[] stages) {
        int[] answer = new int[N];
        List<Stage> list = new ArrayList<>();

        for (int stage = 1; stage <= N; stage++) {
            int notClearCnt = 0;
            int reachedCnt = 0;

            for (int i = 0; i < stages.length; i++) {
                if (stages[i] >= stage)
                    reachedCnt++;
                if (stages[i] == stage)
                    notClearCnt++;
            }

            if (reachedCnt == 0)
                list.add(new Stage(stage, 0));
            else
                list.add(new Stage(stage, (double) notClearCnt / reachedCnt));
        }

        Collections.sort(list);

        for (int i = 0; i < list.size(); i++) {
            answer[i] = list.get(i).stageIdx;
        }

        return answer;
    }

    private static class Stage implements Comparable<Stage> {
        int stageIdx;
        double failPercent;

        public Stage(int stageIdx, double failPercent) {
            this.stageIdx = stageIdx;
            this.failPercent = failPercent;
        }

        @Override
        public int compareTo(Stage o) {
            if (this.failPercent == o.failPercent) {
                return this.stageIdx - o.stageIdx;
            } else {
                return Double.compare(o.failPercent, this.failPercent);
            }
        }
    }

    public static void main(String[] args) {
        solution(5, new int[]{2, 1, 2, 6, 2, 4, 3, 3});
//        solution(4, new int[]{4, 4, 4, 4, 4});
    }
}

카테고리:

업데이트:

댓글남기기