https://school.programmers.co.kr/learn/courses/30/lessons/42889
설명
문제가 어렵지는 않은데 복잡하게 푼 것 같아 잘 정리된 풀이식을 정리한다.
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;
}
}
반응형