티스토리 뷰

프로그래머스 42889번 - 실패율

프로그래머스 42889번 - https://programmers.co.kr/learn/courses/30/lessons/42889
프로그래머스 42889번 - https://programmers.co.kr/learn/courses/30/lessons/42889

 

요구사항

1. 각 스테이지의 실패율 = (스테이지에 도달했으나 아직 클리어하지 못한 플레이어의 수 / 스테이지에 도달한 플레이어 수)

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

3-1. 실패율이 높은 스테이지부터 내림차순으로 스테이지 번호를 배열에 담아 반환하라.

3-2. 실패율이 같을 경우 스테이지 번호가 작은 스테이지가 먼저 오도록 하세요.

 

요구사항 분석 및  풀이과정

1. i번째 스테이지에 도달한 플레이어 수는 i - 1번째 스테이지에 도달한 플레이어 수에서 도달했으나 아직 클리어하지 못한 플레이어의 수를 뺀 것입니다.

2. i번째 스테이지에 도달한 플레이어수가 없다면 실패율은 0으로 정의한다.

3. 정렬 기준은 Comparable 인터페이스의 compareTo 메서드를 통하여 구현합니다.

 

소스코드 작성

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

class Solution {
    
    private static class Stage implements Comparable<Stage> {
    
        private final int num;
        private final float failRate;
        
        public Stage(int num, float failRate) {
            this.num = num;
            this.failRate = failRate;
        }
        
        public int getNum() {
            return num;
        }
        
        public int compareTo(Stage other) {
            if (this.failRate == other.failRate) {
                return this.num - other.num;
            }
            
            return other.failRate - this.failRate >= 0 ? 1 : -1;
        }
    }
    
    public int[] solution(int N, int[] stages) {
        int[] people = new int[N+2];
        int numOfPeople = stages.length;
        
        for(int stage : stages) {
            people[stage]++;
        }
        
        List<Stage> result = new ArrayList<>();
        
        for(int i = 1; i <= N; i++) {
            float rate = numOfPeople - people[i-1] == 0 ? 0.0f : (float)people[i] / (numOfPeople - people[i-1]);
            numOfPeople = Math.max(numOfPeople - people[i-1], 0);
            result.add(new Stage(i, rate));
        }
        
        return result.stream().sorted().mapToInt(Stage::getNum).toArray();
    }
}

 

결과

 

소스코드 깃허브 주소

링크

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/09   »
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
글 보관함