1792 - Maximum Average Pass Ratio
info
- 문제 보기: 1792 - Maximum Average Pass Ratio
- 소요 시간: 20분 52초
- 풀이 언어:
java - 체감 난이도: 3️⃣
- 리뷰 횟수: ✅
풀이 키워드
스포주의
자료구조 힙 그리디
풀이 코드
info
- 메모리: 83900 KB
- 시간: 292 ms
class Solution {
public double maxAverageRatio(int[][] classes, int extraStudents) {
// 가장 ratio 낮은 class에 엘리트 넣기 -> WA
// 가장 delta값 높은 class에 엘리트 넣기 -> AC
PriorityQueue<double[]> pq = new PriorityQueue<>((a, b) -> {
// max-heap
// return Double.compare(b[2], a[2]);
if (a[2] < b[2]) return 1;
else return -1;
});
for (int[] c : classes) {
double delta = ((c[0]+1.0) / (c[1]+1.0)) - ((double)(c[0]) / c[1]);
pq.offer(new double[]{c[0], c[1], delta});
}
while (extraStudents-- > 0) {
double[] c = pq.poll();
double np = c[0] + 1;
double nt = c[1] + 1;
double nd = ((np+1) / (nt+1)) - (np / nt);
pq.offer(new double[]{np, nt, nd});
}
double sum = 0.0;
Object[] arr = pq.toArray();
for (int i = 0; i < arr.length; ++i) {
double[] c = (double[]) arr[i];
sum += c[0] / c[1];
}
// 최종 avg ratio 계산
return sum / classes.length;
}
}