알고리즘 풀이/백준

[2108] 백준 : 통계학(C++)

데롱디롱 2020. 4. 30. 01:13
728x90

* 생각하지 못한 점
- 음수를 반 올림하면 0이 아니라 -0이 되는 경우가 생길 수 있음
- max와 같은 값이 나온 경우, second 변수를 true로 만들어줘서 두 번 나온 값임을 판단하는데,
  1,1,2,2,3,3,3,4,4,4와 같이 이미 2에서 second가 true로 바뀌었는데 새로운 max가 들어갈때
  다시 second를 false로 하지 않았어서 4까지 가지 않았었음ㅜ

#include <iostream>
#include <vector>
#include <algorithm>
#include <map>
#include <numeric>
#include <math.h>
using namespace std;

int main() {
	// 입출력 속도 개선
	cin.tie(NULL);
	ios_base::sync_with_stdio(false);
	
	int N;
	cin >> N;
	vector<int> v(N);
	map<int, int> num;

	for (int i = 0; i < N; i++)
	{
		cin >> v[i];
		if (num.count(v[i]) != 0)
			num[v[i]]++;
		else
			num.insert({ v[i], 1 });
	}

	int max_num = 0;	// 키
	int max = 0;		// 값
	bool second = false;
	// 최대값구하기
	for (auto &m : num)
	{
		if (m.second > max)
		{
			max = m.second;
			max_num = m.first;
			second = false;
		}
		else if (second == false && m.second == max)
		{
			second = true;
			max = m.second;
			max_num = m.first;
		}
	}
	
	if (round(accumulate(v.begin(), v.end(), 0) / (double)N) == -0)
		cout << 0 << "\n";
	else
		cout << round(accumulate(v.begin(), v.end(), 0) / (double)N) << "\n";
	sort(v.begin(), v.end());
	cout << v[N/2] << "\n";
	cout << max_num << "\n";
	cout << v.back() - v.front();

	return 0;
}