수를 처리하는 것은 통계학에서 상당히 중요한 일이다. 통계학에서 N개의 수를 대표하는 기본 통계값에는 다음과 같은 것들이 있다. 단, N은 홀수라고 가정하자.
산술평균 : N개의 수들의 합을 N으로 나눈 값
중앙값 : N개의 수들을 증가하는 순서로 나열했을 경우 그 중앙에 위치하는 값
최빈값 : N개의 수들 중 가장 많이 나타나는 값
범위 : N개의 수들 중 최댓값과 최솟값의 차이
N개의 수가 주어졌을 때, 네 가지 기본 통계값을 구하는 프로그램을 작성하시오.
첫째 줄에 수의 개수 N(1 ≤ N ≤ 500,000)이 주어진다. 그 다음 N개의 줄에는 정수들이 주어진다. 입력되는 정수의 절댓값은 4,000을 넘지 않는다.
첫째 줄에는 산술평균을 출력한다. 소수점 이하 첫째 자리에서 반올림한 값을 출력한다.
둘째 줄에는 중앙값을 출력한다.
셋째 줄에는 최빈값을 출력한다. 여러 개 있을 때에는 최빈값 중 두 번째로 작은 값을 출력한다.
넷째 줄에는 범위를 출력한다.
#include<iostream>
#include<algorithm>
#include<cmath>
#include<vector>
using namespace std;
int coordinate[500001];
int cnt[8001];
int N, a, b, c, d;
int sum = 0;
int main()
{
cin.tie(NULL); ios::sync_with_stdio(false);
cin >> N;
for (int i = 0; i < N; i++)
{
cin >> coordinate[i];
sum += coordinate[i];
cnt[coordinate[i]+4000]++;
}
sort(coordinate, coordinate + N);
int flag;
int max = 0;
for (int i = 0; i < 8001; i++)
{
if (cnt[i] > max)
{
max = cnt[i];
flag = i;
}
}
for (int i = flag + 1; i < 8001; i++)
{
if (cnt[i] == max)
{
flag = i;
break;
}
}
a = round(double(sum) / N);
b = coordinate[(N - 1) / 2];
c = flag - 4000;
d = coordinate[N - 1] - coordinate[0];
cout << a << "\n";
cout << b << "\n";
cout << c << "\n";
cout << d << "\n";
}
#define _CRT_SECURE_NO_WARNINGS
#include<vector>
#include<algorithm>
#include<math.h>
#include <cstdio>
using namespace std;
bool sorting(const vector<int>& a, const vector<int> b) {
if (a[1] > b[1]) {
return true;
}
else if (a[1] == b[1]) {
return a[0] < b[0];
}
else {
return false;
}
}
int main(void) {
vector<int> arr;
vector<vector<int>> count(8001, vector<int>(2, 0));
int N, input;
int i, j, cntP, cntQ;
int sum, mid, max, range;
double avg;
int same = 0;
scanf("%d", &N);
sum = 0;
mid = N / 2;
max = 0;
for (i = 0; i < N; i++) {
scanf("%d", &input);
arr.push_back(input);
sum += input;
count[input + 4000][0] = input;
count[input + 4000][1]++;
}
avg = double(sum) / double(N);
sum = round(avg);
sort(arr.begin(), arr.end());
sort(count.begin(), count.end(), sorting);
for (i = 1; i < count.size(); i++) {
cntQ = count[i - 1][1];
cntP = count[i][1];
if (cntQ == 0) { break; }
if (cntQ > cntP) {
max = count[i - 1][0];
break;
}
else if (same == 0) {
max = count[i][0];
same++;
}
else {
break;
}
}
printf("%d\n", sum);
printf("%d\n", arr[mid]);
printf("%d\n", max);
printf("%d\n", arr[arr.size() - 1] - arr[0]);
return 0;
}