프로그래밍 공방

[프로그래머스] 실패율 본문

개발/문제해결

[프로그래머스] 실패율

hyosupsong 2021. 2. 10. 19:51

문제

programmers.co.kr/learn/courses/30/lessons/42889

 

코딩테스트 연습 - 실패율

실패율 슈퍼 게임 개발자 오렐리는 큰 고민에 빠졌다. 그녀가 만든 프랜즈 오천성이 대성공을 거뒀지만, 요즘 신규 사용자의 수가 급감한 것이다. 원인은 신규 사용자와 기존 사용자 사이에 스

programmers.co.kr

문제해결방법

스테이지의 개수만큼 배열을 선언해주고 각 스테이지마다 도전중인 사용자의 수를 저장해준다.

스테이지를 앞부터 돌며 (현재 스테이지에 도전중인 사용자의 수 / 스테이지까지 도달한 인원의 수) 로 실패율을 구해준다.

다음 스테이지로 넘어갈 때 남은 사용자의 수를 구하기 위해 도전중인 사용자의 수를 빼면서 계산해준다.

전체 스테이지에 대해 실패율을 구하고 조건에 맞춰 정렬해준다.

코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
package Programmers;
 
import java.util.Arrays;
import java.util.Comparator;
import java.util.PriorityQueue;
 
public class Solution_실패율 {
 
    public static int[] solution(int N, int[] stages) {
        int people = stages.length;
        int[] failPerStage = new int[N+2];
        PriorityQueue<double[]> pq = new PriorityQueue<>(new Comparator<double[]>() {
            @Override
            public int compare(double[] arg0, double[] arg1) {
                if(arg0[1]==arg1[1]) return Double.compare(arg0[0], arg1[0]);
                return Double.compare(arg1[1], arg0[1]);
            }
        });
        for(int stage : stages) failPerStage[stage]++;
        for(int i=1; i<=N; i++) {
            if(people!=0) pq.add(new double[]{i, (double)failPerStage[i]/people});
            else pq.add(new double[]{i, 0});
            people-=failPerStage[i];
        }
        int[] answer = new int[N];
        for(int i=0; i<N; i++) answer[i] = (int)pq.poll()[0];
        return answer;
    }
    
    public static void main(String[] args) {
        int N = 4;
        int[] stages = {4,4,4,4,4};
        System.out.println(Arrays.toString(solution(N, stages)));
    }
}
cs


코드에 대한 피드백이나 더 좋은 아이디어는 언제나 환영입니다.

'개발 > 문제해결' 카테고리의 다른 글

[프로그래머스] 파일명 정렬  (0) 2021.02.10
[프로그래머스] 방금그곡  (0) 2021.02.10
[프로그래머스] 다트 게임  (0) 2021.02.10
[프로그래머스] 메뉴 리뉴얼  (0) 2021.02.08
[백준] 5676번 : 음주 코딩  (0) 2021.02.05