본문 바로가기
🥇Baekjoon Solutions/기타

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

by 코푸는 개발자 2021. 7. 28.
728x90

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

 

2108번: 통계학

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

www.acmicpc.net

최초 풀이

주요부분

최빈값을 구할 때 최대 절대값이 4000인 것을 감안하여 인덱스값으로 빈도를 누적해 줍니다.

#include <iostream>
#include <vector>
#include <cmath>
#include <algorithm>


using namespace std;

int cnt[8001];// 음수 인덱스를 양수로 만들어줌

int main() {
	vector<int>v;
	int N, k, total = 0;
	cin >> N;

	for (int i = 0; i < N; i++)
	{
		cin >> k;
		total += k;
		v.push_back(k);
		cnt[k + 4000]++;
	}

	sort(v.begin(), v.end());

	int flag;
	int max = 0;

	for (int i = 0; i < 8001; i++)
	{
		if (cnt[i] > max)
		{
			max = cnt[i];
			flag = i;
		}
	}

	for (int i = flag + 1; i < 8001; i++)
	{
		if (cnt[i] == max)
		{
			flag = i;
			break;
		}
	}

	
	cout << round(total / (1.0 * N)) << endl;
	cout << v[(N-1) / 2] << endl;
	cout << flag - 4000 << endl;
	cout << v[N - 1] - v[0];

	return 0;
}

 

728x90

댓글