티스토리 뷰
programmers.co.kr/learn/courses/30/lessons/42889#
import java.util.*;
class Solution {
public int[] solution(int N, int[] stages) {
int[] answer = new int[N];
// stage 별로 실패율을 담을 map
Map<Integer, Double> failMap = new HashMap<>();
Arrays.sort(stages);
// stages를 담을 deque
Deque<Integer> deq = new ArrayDeque<Integer>();
for(int stage : stages) {
deq.add(stage);
}
for(int i=1; i<=N; i++) {
int cnt = 0;
int size = deq.size();
while(deq.peekFirst() != null && deq.peekFirst() == i) {
deq.remove(i);
cnt++;
}
double rate = (double) cnt / size;
// 아무도 도달하지 못한 stage의 경우!
if(Double.isNaN(rate)){
rate = 0.0;
}
//if(size == 0 && !deq.contains(i))
// failMap.put(i, 0.0);
failMap.put(i, rate);
}
// 실패율 내림차순으로 key 정렬하기
List<Integer> stageList = new ArrayList<>();
stageList.addAll(failMap.keySet());
Collections.sort(stageList, new Comparator() {
public int compare(Object o1, Object o2) {
Object v1 = failMap.get(o1);
Object v2 = failMap.get(o2);
return ((Comparable) v2).compareTo(v1);
}
});
for(int i=0; i<answer.length; i++)
answer[i] = stageList.get(i);
return answer;
}
}
아무도 도달하지 못한 stage를 고려하기 위해 테스트 케이스에 8, [1,2,3,4,5,6,7], [7,6,5,4,3,2,1,8] 추가함
'ALGORITHM' 카테고리의 다른 글
[JAVA] [프로그래머스] 2019 카카오 개발자 겨울 인턴십 - 크레인 인형뽑기 게임 (0) | 2020.10.18 |
---|---|
[JAVA] [프로그래머스] 월간 코드 챌린지 시즌1 - 두 개 뽑아서 더하기 (0) | 2020.10.08 |
[JAVA] [프로그래머스] 2018 KAKAO BLIND RECRUITMENT 1차 - 비밀지도 (0) | 2020.09.27 |
[JAVA] [프로그래머스] Level 1 - 연습문제 - 예산 (0) | 2020.09.27 |
[JAVA] [프로그래머스] Level 1 - 연습문제 - 행렬의 덧셈 (0) | 2020.09.23 |