반응형
풀이
중요한 조건
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
반응형
'알고리즘 > 프로그래머스' 카테고리의 다른 글
프로그래머스 소수 만들기 자바 java (0) | 2021.08.23 |
---|---|
프로그래머스 숫자 문자열과 영단어 자바 java (0) | 2021.08.19 |
프로그래머스 약수의 개수와 덧셈 자바 java (0) | 2021.06.15 |
프로그래머스 로또의 최고 순위와 최저 순위 자바 java (0) | 2021.06.11 |
프로그래머스 내적 자바 java (0) | 2021.06.03 |
댓글