수를 처리하는 것은 통계학에서 상당히 중요한 일이다. 통계학에서 N개의 수를 대표하는 기본 통계값에는 다음과 같은 것들이 있다. 단, N은 홀수라고 가정하자.
-
산술평균 : N개의 수들의 합을 N으로 나눈 값
-
중앙값 : N개의 수들을 증가하는 순서로 나열했을 경우 그 중앙에 위치하는 값
-
최빈값 : N개의 수들 중 가장 많이 나타나는 값
-
범위 : N개의 수들 중 최댓값과 최솟값의 차이
N개의 수가 주어졌을 때, 네 가지 기본 통계값을 구하는 프로그램을 작성하시오.
https://www.acmicpc.net/problem/2108
2108번: 통계학
첫째 줄에 수의 개수 N(1 ≤ N ≤ 500,000)이 주어진다. 그 다음 N개의 줄에는 정수들이 주어진다. 입력되는 정수의 절댓값은 4,000을 넘지 않는다.
www.acmicpc.net
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
|
import java.util.*;
//백준2108
public class bj_17 {
public static void main(String[] args) {
Scanner in=new Scanner(System.in);
int n=in.nextInt();
int[]num=new int[n];
int[]much= new int[8001]; //최빈값
double sum=0;
for(int i=0;i<num.length;i++){
num[i]=in.nextInt();
sum+=num[i];
much[num[i] + 4000]++;
}
Arrays.sort(num);
int min = 0;
for(int i = 0; i < much.length; i++) {
if(min < much[i]) {
min = much[i]; // 최빈값을 계산한다.
}
}
int[] two_min = new int[2]; // 가장 많이 나타나는 값이 여러 개일 경우를 위한 배열
int j = 0;
for(int i = 0; i < much.length; i++) {
if(two_min[0] != 0 && two_min[1] != 0)
break;
if(min == much[i]) {
two_min[j] = i;
j++;
}
} // 최빈값중 두 번째로 작은 값을 넣기위함.
if(two_min[1] == 0){
two_min[1] = two_min[0];
}
System.out.println(Math.round(sum/n));
System.out.println(num[n/2]);
System.out.println(two_min[1] - 4000);
System.out.println(num[n-1]-num[0]);
}
}
|
cs |