반응형
코딩테스트 연습 - 실패율
실패율 슈퍼 게임 개발자 오렐리는 큰 고민에 빠졌다. 그녀가 만든 프랜즈 오천성이 대성공을 거뒀지만, 요즘 신규 사용자의 수가 급감한 것이다. 원인은 신규 사용자와 기존 사용자 사이에 스��
programmers.co.kr
우선순위큐를 활용해서 실패율이 높은 순서대로 정렬하고 실패율이 같을 경우 스테이지가 낮은 순서대로 정렬될 수 있도록 하였다.
각 스테이지에 도달한 사람과 실패한 사람의 숫자는 Stage의 역순으로 for문을 돌면서 구해줬다.
예제 1로 살펴보면 다음과 같다.
실패율은 Stage에 도달한 사람의 수 / Sum으로 계산하면 된다.
※ Sum이 0일 경우의 예외 처리를 해주자!
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
|
import java.util.PriorityQueue;
public class 실패율 {
static class Ratio implements Comparable<Ratio> {
double ratio;
int stage;
Ratio(double ratio, int stage) {
this.ratio = ratio;
this.stage = stage;
}
@Override
// 실패율이 높은 순으로 정렬, 실패율이 같으면 stage가 작은 순으로 정렬
public int compareTo(Ratio o) {
if (this.ratio == o.ratio)
return Integer.compare(this.stage, o.stage);
return -Double.compare(this.ratio, o.ratio);
}
}
public int[] solution(int N, int[] stages) {
int[] answer = new int[N];
// 각 스테이지의 카운트를 세어주기 위한 배열
// N개의 스테이지가 있을 때 N+1 스테이지에 도달한 사람이 있을 수 있으므로 N+2 크기로 잡아준다.
int[] stage_cnt = new int[N + 2];
for (int stage : stages) {
stage_cnt[stage]++;
}
PriorityQueue<Ratio> ratio = new PriorityQueue<Ratio>();
int sum = stage_cnt[N + 1];
for (int i = N; i > 0; i--) {
sum += stage_cnt[i];
double r = 0;
// sum이 0일 경우 예외 처리
if (sum != 0)
r = (double) stage_cnt[i] / (double) sum;
ratio.add(new Ratio(r, i));
}
int idx = 0;
while (!ratio.isEmpty()) {
answer[idx++] = ratio.poll().stage;
}
return answer;
}
}
|
cs |
반응형
'Algorithm > Programmers' 카테고리의 다른 글
[Weekly Challenge] 5주차_모음사전 (python, swift) (0) | 2021.10.11 |
---|---|
[Weekly Challenge] 2주차_상호평가 (python, swift) (0) | 2021.10.10 |
[2019 KAKAO BLIND RECRUITMENT] 오픈채팅방(JAVA) (0) | 2020.09.11 |
[2020 KAKAO BLIND RECRUITMENT] 자물쇠와 열쇠 (JAVA) (2) | 2020.09.09 |
[2020 KAKAO BLIND RECRUITMENT] 괄호변환 (JAVA) (0) | 2020.09.08 |
댓글