수를 처리하는 것은 통계학에서 상당히 중요한 일이다. 통계학에서 N개의 수를 대표하는 기본 통계값에는 다음과 같은 것들이 있다. 단, N은 홀수라고 가정하자.
- 산술평균 : N개의 수들의 합을 N으로 나눈 값
- 중앙값 : N개의 수들을 증가하는 순서로 나열했을 경우 그 중앙에 위치하는 값
- 최빈값 : N개의 수들 중 가장 많이 나타나는 값
- 범위 : N개의 수들 중 최댓값과 최솟값의 차이
N개의 수가 주어졌을 때, 네 가지 기본 통계값을 구하는 프로그램을 작성하시오.
import java.io.*;
import java.util.*;
class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(System.out));
int n=Integer.parseInt(br.readLine());
int[] counting=new int[8001];
int[] array=new int[n];
int[] sorted=new int[n];
int sum=0;
for(int i=0; i<n; i++) {
array[i] = Integer.parseInt(br.readLine());
sum += array[i];
}
for(int i=0; i<n; i++)
counting[array[i]+4000]++;
LinkedList<Integer> list=new LinkedList<>();
int max=0;
for(int i=0; i<8001; i++)
if(counting[i]>0){
if(list.isEmpty()) {
max=counting[i];
list.add(i);
}
else if(max<counting[i]){
max=counting[i];
list.clear();
list.add(i);
}
else if(max==counting[i]){
list.add(i);
}
}
for(int i=0;i<8000;i++)
counting[i+1]+=counting[i];
for(int i=n-1; i>=0; i--)
sorted[--counting[array[i]+4000]]=array[i];
bw.write(Math.round((double) sum/n)+"\n");
bw.write(sorted[n/2]+"\n");
if(list.size()>1){
list.removeFirst();
bw.write(list.remove()-4000+"\n");
}
else
bw.write(list.remove()-4000+"\n");
bw.write(sorted[n-1]-sorted[0]+"\n");
bw.flush();
}
}