Algorithm/프로그래머스

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

youngjae-kim 2025. 3. 12. 20:43
728x90
반응형

문제

https://school.programmers.co.kr/learn/courses/30/lessons/42889

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

풀이

stages 배열을 돌면서 각 스테이지에 남아 있는 인원을 더해주기

각 스테이지의 실패율을 구하여 해당 스테이지에 대한 실패율을 리스트에 담기

리스트를 정렬 실패율이 높은 순서 -> 낮은 순서로 내림차순 정렬. 실패율이 같다면 작은 번호의 스테이지가 오도록 정렬 기준 정하기

 

정답 코드

package com.programmers.level1.p42889;

import java.util.*;

public class Solution {
    public int[] solution(int N, int[] stages) {
        int[] answer = {};

        int[] arr = new int[N + 2];

        // 배열을 돌면서 해당 스테이지에 남아있는 인원 더해주기
        for (int i = 0; i < stages.length; i++) {
            // N보다 크면 모든 스테이지를 통과한 사람이라 체크 x
            if (stages[i] <= N + 1) {
                arr[stages[i]]++; // 각 스테이지의 사람을 더해주기
            }
        }

        int total = stages.length; // 전체 사람 수

        List<Stage> list = new ArrayList<>();

        // 1 ~ N까지 돌면서 실패율 구하기
        for (int i = 1; i <= N; i++) {
            double rate = total == 0 ? 0 : (double) arr[i] / total;
            list.add(new Stage(i, rate));
            total -= arr[i];
        }

        Collections.sort(list, new Comparator<Stage>() {
            @Override
            public int compare(Stage s1, Stage s2) {
                if (s1.failure - s2.failure > 0) {
                    return -1;
                } else if (s1.failure == s2.failure) {
                    return s1.idx - s2.idx;
                } else {
                    return 1;
                }
            }
        });

        answer = new int[N];

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

        return answer;
    }

    class Stage {
        int idx; // 스테이지 번호
        double failure; // 실패율

        public Stage(int idx, double failure) {
            this.idx = idx;
            this.failure = failure;
        }
    }
}

 

 

  • 실패율을 잘못 구하여 틀렸었다.
  • Comparator를 익명으로 넣을 때 실수를 많이 하였다.
728x90
반응형