728x90
평균, 중앙값, 최빈값, 범위를 구하는 문제입니다.
평균 :
n개의 입력받은 값을 전부 더한 후 n으로 나누고
+0.5를 해준 후 floor함수로 내림을 해줘서 평균해주어서 구했습니다.
중앙값 :
n은 홀수이므로 n / 2 + 1번째 위치가 중앙값입니다.
sort한 다음 n / 2 + 1번째 배열을 출력했습니다.
최빈값 :
많이 나온 값들을 vector에 넣어두고
그 값들중 두번째로 작은 값을 출력했습니다.
범위 :
입력받을 때 가장 큰 숫자와 가장 작은 숫자를 계산하였고
가장 큰 숫자 - 가장 작은 숫자를 해주어서 구했습니다.
#include <iostream>
#include <algorithm>
#include <cstring>
#include <vector>
#include <math.h>
using namespace std;
int main(int argc, char *argv[])
{
int n;
int num;
double avg = 0;
int sum = 0;
int count = 0;
int center;
int centerN;
int manyN;
int arr[8010];
int maxN = -987654321;
int minN = 987654321;
vector<int> v;
cin >> n;
memset(arr, 0, sizeof(arr));
center = n / 2 + 1;
for (int i = 0; i < n; ++i) {
cin >> num;
sum += num;
maxN = max(maxN, num);
minN = min(minN, num);
++arr[num + 4000];
if (count < arr[num + 4000]) {
v.clear();
count = arr[num + 4000];
v.push_back(num + 4000);
}
else if (count == arr[num + 4000]) {
v.push_back(num + 4000);
}
}
sort(v.begin(), v.end());
avg = floor(((double)sum / n) + 0.5);
sum = 0;
for (int i = 0; i <= 8000; ++i) {
sum += arr[i];
if (sum >= center) {
centerN = i - 4000;
break;
}
}
if (v.size() == 1) {
manyN = v[0] - 4000;
}
else {
manyN = v[1] - 4000;
}
printf("%.0lf\n", avg);
printf("%d\n", centerN);
printf("%d\n", manyN);
printf("%d\n", maxN - minN);
return 0;
}
'알고리즘' 카테고리의 다른 글
[C++] 백준 11651번 좌표 정렬하기 2 (0) | 2019.08.30 |
---|---|
[C++] 백준 11650번 좌표 정렬하기 (0) | 2019.08.30 |
[C++] 백준 10989번 수 정렬하기3 (2) | 2019.08.30 |
[C++] 백준 2751번 수 정렬하기2 (0) | 2019.08.30 |
[C++] 백준 2750번 수 정렬하기 (0) | 2019.08.30 |