코테/lvl1

프로그래머스 실패율(lvl1) 풀어보기

디비드킴 2026. 9. 8. 10:39

문제링크

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

 

프로그래머스

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

programmers.co.kr

 

문제 핵심

-실패율은 다음과 같이 정의한다.

스테이지에 도달했으나 아직 클리어하지 못한 플레이어의 수 / 스테이지에 도달한 플레이어 수

만약 실패율이 같은 스테이지가 있다면 작은 번호의 스테이지가 먼저 오도록 하면 된다.

스테이지에 도달한 유저가 없는 경우 해당 스테이지의 실패율은 0 으로 정의한다.


문제 풀이법

-일단 클리어개념은 +1 이되야한다

각스테이지별 실패확률을 구한다

실패율순위를 체킹한다

해당실패율이 몇번째인지 체킹하는데 오래걸렸다

사람처럼 체크하는것 처럼 최대한 코드에 담았다


코드

 public static int[] solution(int N, int[] stages) {
      int[] answer = new int[N];
      int[] arr = new int[N + 2];
      int[] pass = new int[N + 2];
      for (int i = 0; i < stages.length; i++) {
         arr[stages[i]] = arr[stages[i]] + 1;
         for (int ii = 1; ii <= stages[i]; ii++) {
            pass[ii] = pass[ii] + 1;
         }
      }
      double[] temp = new double[N + 2];
      for (int i = 1; i < N + 1; i++) {
         if (arr[i] == 0 && pass[i] == 0) {
            temp[i] = 0;
            continue;
         }
         double result = (double) arr[i] / pass[i];
         temp[i] = result;
      }
      for (int i = 1; i <= N; i++) {
          int n=0;
         for (int ii = 1; ii < N + 1; ii++) {
            if(i==ii){
               continue;
            }
            if(temp[i]<temp[ii]){
               n+=1;
            }
            if(temp[i]==temp[ii]){
               if(i>ii){
                  n+=1;
               }
            }
         
         }
         answer[n]=i;
      }
      return answer;
   }

결과

 



gpt피드백

pass 계산이 가장 아까움

사람 한 명마다 그 사람이 도달한 스테이지까지 전부 pass를 증가시키고 있지.

사실 네 arr에 이미

각 스테이지에 몇 명이 있는지

정보가 들어가 있어.

그러면 처음 도전자 수를 stages.length로 잡고, 각 스테이지를 지나면서 그 스테이지에서 멈춘 사람을 빼는 방식으로 계산할 수 있어.

int players = stages.length;

 

for (int i = 1; i <= N; i++) {

 

    if (players == 0) {

        temp[i] = 0;

    } else {

        temp[i] = (double) arr[i] / players;

    }

 

    players -= arr[i];

}

 

배운점

생각을 코드로 명확히 옮기는 연습이 필요하다
들였던 시간에 비해 글로쓰니 간단하다
어쩌면 내가 아직 약간 이해가 부족해서 제대로 글을 쓰지 못한거같다.