[백준 2108번 C/C++] 통계학

 

 

https://www.acmicpc.net/problem/2108

 

2108번: 통계학

첫째 줄에 수의 개수 N(1 ≤ N ≤ 500,000)이 주어진다. 단, N은 홀수이다. 그 다음 N개의 줄에는 정수들이 주어진다. 입력되는 정수의 절댓값은 4,000을 넘지 않는다.

www.acmicpc.net


 

해결전략

 

 

 


 

코드

 

#include <iostream>
#include <vector>
#include <algorithm>
#include <cmath>
#include <map>
using namespace std;

bool Comp(const pair<int, int>& a, const pair<int, int>& b) {
	if (a.second == b.second)
		return a.first < b.first;
	else
		return a.second > b.second;
}

int main() {
	ios::sync_with_stdio(false);
	cin.tie(NULL);
	cout.tie(NULL);

	int n, input, maxNum = -4001, minNum = 4001;
	double sum = 0;
	cin >> n;
	vector<int> v(n);
	map<int, int> myMap;

	for (int i = 0; i < n; i++) {
		cin >> input;

		v[i] = input;

		sum += input;

		myMap[input]++;

		if (maxNum < v[i]) maxNum = v[i];
		if (minNum > v[i]) minNum = v[i];
	}

	//산술평균
	if (round(sum / n) == 0)
		cout << "0" << "\n";
	else
		cout << round(sum / n) << "\n";

	//중앙값
	sort(v.begin(), v.end());
	cout << v[n / 2] << "\n";

	//최빈값
	vector<pair<int, int>> vec(myMap.begin(), myMap.end());
	sort(vec.begin(), vec.end(), Comp);

	if (n > 1 && vec[0].second == vec[1].second)
		cout << vec[1].first << "\n";
	else
		cout << vec[0].first << "\n";

	//범위
	cout << maxNum - minNum << "\n";

	return 0;
}