알고리즘 풀이/백준
[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;
}