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

    2020. 4. 30.

    by. 데롱디롱

    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;
    }

    댓글