난이도 ★☆☆
문제 출처
https://www.welcomekakao.com/learn/courses/30/lessons/42889
코딩테스트 연습 - 실패율 | 프로그래머스
실패율 슈퍼 게임 개발자 오렐리는 큰 고민에 빠졌다. 그녀가 만든 프랜즈 오천성이 대성공을 거뒀지만, 요즘 신규 사용자의 수가 급감한 것이다. 원인은 신규 사용자와 기존 사용자 사이에 스테이지 차이가 너무 큰 것이 문제였다. 이 문제를 어떻게 할까 고민 한 그녀는 동적으로 게임 시간을 늘려서 난이도를 조절하기로 했다. 역시 슈퍼 개발자라 대부분의 로직은 쉽게 구현했지만, 실패율을 구하는 부분에서 위기에 빠지고 말았다. 오렐리를 위해 실패율을 구하는 코드를
www.welcomekakao.com
포인트
1. 배열 생성
(1) 입력으로 주어지는 배열은 정답을 구하기에 직관적이지 않다고 판단하였다. 따라서
도전자별 스테이지 --> 스테이지별 도전자
로 바꾼 배열을 생성하였다.
(2) 실패율을 저장하는 배열을 생성하였다.
(3) 실패율을 내림차순으로 정렬한 결과의 인덱스를 저장하기 위한 배열(정답 배열)을 생성하였다.
2. 정렬
내림차순으로 정렬한 결과가 아닌, 내림차순으로 정렬했을 때의 인덱스 결과를 출력해야 한다는 점에 유의한다.
3. 실패율 예외처리
0으로 나누는 경우에 대한 예외처리에 유의한다.
class Solution {
public int[] solution(int N, int[] stages) {
int totalChallengers=stages.length;
int[] challenger=new int[N+2];
for(int i=0;i<totalChallengers;i++){
challenger[stages[i]]++;
}
double[] failureRate=new double[N+1];
int restChallengers=totalChallengers;
for(int i=1;i<=N;i++){
if(restChallengers!=0){
failureRate[i]=(double)challenger[i]/(double)restChallengers;
restChallengers-=challenger[i];
}
}
int[] answer = new int[N];
double max=-1*1.0;
int idx=0;
for(int i=0;i<N;i++){
for(int j=1;j<=N;j++){
if(failureRate[j]>max){
max=failureRate[j];
idx=j;
}
}
answer[i]=idx;
failureRate[idx]=-1*1.0;
max=-1*1.0;
}
return answer;
}
}
'알고리즘 > 카카오' 카테고리의 다른 글
(2018년)KAKAO BLIND RECRUITMENT_오픈채팅방 (1) | 2019.09.06 |
---|
댓글