(Python, Java) 프로그래머스 - 실패율

[문제 링크]

Python 풀이

from collections import Counter
from collections import deque


def solution(N, stages):
    result = []
    total = len(stages)
    q = deque()
    count = Counter(stages)
    for num in range(1, N + 1):
        nowStagePeople = count.get(num)
        if nowStagePeople is None:
            percent = 0
        else:
            percent = nowStagePeople / total
            total -= nowStagePeople

        q.append([percent, num])

    q = list(q)
    q.sort(key=lambda x: (-x[0], x[1]))

    for percent, num in q:
        result.append(num)

    return result

Counter.get에서 값이 존재하지 않는다면 0이 아니라 None이 나오는 것을 주의하자.

Java 풀이

import java.util.Arrays;
import java.util.Comparator;

class Solution {
    public int[] solution(int N, int[] stages) {
        int peopleCount = stages.length;
        Stage[] stageArr = new Stage[N];
        int[] dpPeople = new int[N + 2];
        for (int i = 1; i <= N; i++) {
            stageArr[i - 1] = new Stage();
            stageArr[i - 1].setStageNum(i);
        }

        for (int stage : stages) {
            dpPeople[stage]++;
        }

        for (int i = 1; i <= N; i++) {
            double fail = 0;
            if (peopleCount != 0) {
                fail = (double) dpPeople[i] / peopleCount;
            }
            stageArr[i - 1].setFailPercent(fail);
            peopleCount -= dpPeople[i];
        }

        return Arrays.stream(stageArr)
                .sorted(Comparator.reverseOrder())
                .map(stage -> stage.getStageNum())
                .mapToInt(Integer::intValue).toArray();
    }

    class Stage implements Comparable<Stage> {
        int stageNum;
        double failPercent;

        public int getStageNum() {
            return stageNum;
        }

        public void setStageNum(int stageNum) {
            this.stageNum = stageNum;
        }

        public double getFailPercent() {
            return failPercent;
        }

        public void setFailPercent(double failPercent) {
            this.failPercent = failPercent;
        }

        @Override
        public int compareTo(Stage o) {
            return Double.compare(this.failPercent, o.getFailPercent());
        }
    }
}

© 2021. By Backtony