public class business {
public static void main(String[] args) {
/*
* 데이터 입력구분 (N = 입력 받을 데이터 수 K = 데이터를 자를 개수
* N만큼 데이터 입력받음
*/
Scanner sc = new Scanner(System.in);
int N = sc.nextInt();
int K = sc.nextInt();
double a[] = new double[N];
for (int i = 0; i < N; i++) {
a[i] = sc.nextDouble();
}
/*
* 클래스 선언 후 퀵소트 메소드 실행(정렬)
*/
business bu = new business();
bu.quicksort(a, 0, N-1);
//양쪽 K만큼 데이터를 제외하고 양쪽 끝에서 남은 점수 중 가장 가까운 것으로 교체
double sum = a[K];
double sum1 = a[N-K-1];
for (int i = 0; i < K; i++) {
a[i] = sum;
a[(N - i-1)] = sum1;
}
double jj = 0.00; //보정에 쓰일 총 값 저장 변수
double jj2 = 0.00; //절사에 쓰일 총 값 저장변수
for (int i = 0; i < N; i++) {
if((i>=K && i<=N-K-1)){//양쪽 K만큼 데이터를 제외한
jj2 += a[i];
}
jj += a[i];
}
//출력
System.out.printf("%.02f\n",jj2/(N-K-K));
System.out.printf("%.02f",jj/N);
}
/**
* 퀵 정렬
* @param data 정렬 시킬 데이터
* @param left Left시작점
* @param right Right 시작점
* @return 정렬된 데이터
*/
public double[] quicksort(double[] data, int left, int right){
double pivot; //기준점
double num; //데이터 교환에 쓰일 변수
int i,j; //반복문에 쓰일 변수
if(left < right) /*1*/
{
i= left; j = right+1;
pivot = data[left];
while(true) /*2*/
{
//앞에서 기준점보다 큰 값을 찾는다.
do
++i;
while(i <= right && data[i]<pivot ); /*3*/
//뒤에서 기준점보다 작은 값을 찾는다.
while(data[--j]>pivot); /*4*/
//i가 j보다 작을 경우 두 값을 바꾼다.
if(i < j){
num = data[i];
data[i] = data[j];
data[j]= num;
}
//i가 j보다 같거나 클 경우 반복문을 종료한다.
if(!(i<j))break;
}
num = data[left];
data[left] = data[j];
data[j]= num;
//앞에서부터 j-1만큼의 데이터를 정렬한다.
quicksort(data, left, j-1); //재귀적인 방법(C의 재귀함수)
//j+1에서부터 끝에까지의 데이터를 정렬 한다.
quicksort(data, j+1, right);//재귀적인 방법
}
return data;
}
}