나의 브을로오그으

[c++] 2108번 : 통계학 본문

알고리즘/BaekJoon

[c++] 2108번 : 통계학

__jhp_+ 2022. 4. 13. 14:50

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

 

2108번: 통계학

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

www.acmicpc.net

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

using namespace std;

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

	// Input
	int arr[8001] = { 0 };
	int average = 0;
	int median = 0;
	int mode = 0;
	int range = 0;

	int n = 0;
	cin >> n;

	int data = 0;
	int sum = 0;
	for (int i = 0; i < n; ++i)
	{
		cin >> data;
		sum += data;
		++arr[data + 4000];
	}

	// 중앙값
	int count = 0;
	for (int i = 0; i < 8001; ++i)
	{
		count += arr[i];
		if (count > n / 2)
		{
			median = i - 4000;
			break;
		}
	}

	// 최대, 최솟값
	int maxNum = 0;
	int minNum = 0;
	for (int i = 0; i < 8001; ++i)
	{
		if (arr[i] != 0)
		{
			minNum = i - 4000;
			break;
		}
	}
	for (int i = 8000; i > -1; --i)
	{
		if (arr[i] != 0)
		{
			maxNum = i - 4000;
			break;
		}
	}

	// 최빈값
	int modeCount = 0;
	for (int i = 0; i < 8001; ++i)
	{
		modeCount = modeCount > arr[i] ? modeCount : arr[i];
	}
	int sameCount = 0;
	for (int i = 0; i < 8001; ++i)
	{
		if (arr[i] == modeCount)
		{
			mode = i - 4000;
			++sameCount;
			if (sameCount == 2)
			{
				break;
			}
		}
	}

	int result[4] = { (int)round((double)sum / (double)n), median, mode, maxNum - minNum };
	for (int i = 0; i < 4; ++i)
	{
		cout << result[i] << '\n';
	}
	
	return 0;
}

'알고리즘 > BaekJoon' 카테고리의 다른 글

[c++] 2231번 : 분해합  (0) 2022.04.15
[c++] 2164번 : 카드2  (0) 2022.04.15
[c++] 1978번 : 소수 찾기  (0) 2022.03.30
[c++] 1966번 : 프린터 큐  (0) 2022.03.29
[c++] 1929번 : 소수 구하기  (0) 2022.03.28