본문 바로가기
알고리즘/프로그래머스

프로그래머스 실패율 자바 java

by 클로드 2021. 6. 16.
반응형

풀이

중요한 조건

1. 실패율이 같을 경우 스테이지가 작은 번호가 우선

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

 

hashMap을 이용해서 key는 스테이지 value는 실패율 값을 집어넣어서 해결하였다

 

테스트 케이스 1, 6, 7, 9, 13, 23, 24, 25가 실패하는 에러가 발생할 경우

0을 나누려다 보니 에러가 계속 나는 것이 원인이 됩니다

N : 5  stage : [1,2,2,1,3]로 테스트 케이스를 추가해보면 원인을 알 수 있습니다

 

0 값일 경우 해당 스테이지에 실패율을 0을 입력해줘서 해결

 

 

코드

import java.util.*;

class Solution {
    public int[] solution(int N, int[] stages) {
        int[] answer = new int[N];
        int[] stageCount = new int[N];
        Map<Integer, Double> failPercent = new HashMap<>();
        int total = stages.length;

        for (int i = 0; i < stages.length; i++) {
            if (stages[i] == N + 1) { // 마지막 스테이지를 클리어한 것은 제외
                continue;
            }
            stageCount[stages[i] - 1]++;
        }

        for (int i = 0 ; i < stageCount.length; i++) {
            if (total == 0) {
                failPercent.put(i, 0d);
                continue;
            }
            failPercent.put(i, (double)stageCount[i] / (double)total);
            total -= stageCount[i];
        }

        for (int i = 0; i < N; i++) {
            double max = -1;
            int maxKey = 0;

            for (int key : failPercent.keySet()) {
                if (max < failPercent.get(key)) {
                    max = failPercent.get(key);
                    maxKey = key;
                }
            }

            answer[i] = maxKey + 1;
            failPercent.remove(maxKey);
        }

        return answer;
    }
}

 

출처

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

 

반응형

댓글