백준 풀이/자바(Java)
백준 6986 자바 - 절사평균
콘스_
2024. 8. 10. 19:30
// 절사평균
package Silver_III_3;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;
public class Ex6986 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
// 점수 저장 후 정렬
int n = Integer.parseInt(st.nextToken()); // 전체 점수의 개수
List<Double> list = new ArrayList<>(); // 점수 저장 리스트
for (int i = 0; i < n; i++) {
list.add(Double.parseDouble(br.readLine()));
}
Collections.sort(list); // 점수 정렬
// 절사, 보정평균 구하기
int k = Integer.parseInt(st.nextToken()); // 제외되는 점수의 개수
Deque<Double> deque = new ArrayDeque<>(list);
for (int i = 0; i < k; i++) {
deque.pollFirst();
deque.pollLast();
}
double trimmedSum = deque.stream() // 절사평균 덧셈
.mapToDouble(Double::doubleValue)
.sum();
double trimmedAverage = trimmedSum / (n - k * 2); // 절사평균
double correctedSum = trimmedSum + deque.peekFirst() * k + deque.peekLast() * k; // 보정평균 덧셈
double correctedAverage = correctedSum / n; // 보정평균
String result = String.format("%.2f\n", trimmedAverage + 1e-8);
result += String.format("%.2f\n", correctedAverage + 1e-8);
System.out.print(result);
}
}
소수점 오차 떄문에 조심해야 하는 문제였다.