본문 바로가기
알고리즘/문제 풀이

프로그래머스: 실패율

by 위대한초밥V 2023. 10. 10.

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

설명

문제가 어렵지는 않은데 복잡하게 푼 것 같아 잘 정리된 풀이식을 정리한다. 

1부터 N 스테이지까지 반복문을 돌면서 total(스테이지에 도전한 플레이어 수), fail(스테이지를 클리어하지 못한 플레이어의 수)을 구한다.

도전한 플레이어가 없다면 total을 영어로 하고, 실패율을 계산해 해당 스테이지에 넣어준다.

stage에 대한 map이 완성되었다면, 비교를 통해 가장 큰 수를 찾는다. 

해당 수를 찾으면 map에서 제거한다.

코드

import java.util.*;

class Solution {
    public int[] solution(int N, int[] stages) {
        Map<Integer, Double> map = new HashMap<>();
        for(int i = 1; i <= N; i++) {
            double total = 0;
            double fail = 0;
            for(int j = 0; j < stages.length; j++) {
                if(i <= stages[j]) total++;
                if(i == stages[j]) fail++;
            }
            if(total == 0 && fail == 0) total = 1;
            map.put(i, fail/total);
        }
        
        int[] answer = new int[N];
        for(int i = 0; i < N; i++) {
            double max = -1;
            int rKey = 0;
            for(int key : map.keySet()) {
                if(max < map.get(key)) {
                    max = map.get(key);
                    rKey = key;
                }
            }
            answer[i] = rKey;
            map.remove(rKey);
        }
        
        return answer;
    }
}
반응형