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

백준 2108번: 통계학

#include <iostream>
#include <cmath>
#include <algorithm>
using namespace std;


int nums[500001];

int main()
{
	int N;
	
	int average = 0;
	int middle = 0;
	int range = 0;


	cin >> N;

	
	for (int i = 0; i < N; i++)
	{
		cin >> nums[i];
	}

	sort(nums, nums + N);


	//평균
	double sum = 0;

	for (int i = 0; i < N; i++)
	{
		sum += nums[i];
	}

	average = round(sum / N);

	
	//중앙값
	int midNum = N / 2;
	middle = nums[midNum];


	//최빈값  잘 모르겠음
	int most[2] = { -9999, -9999 };
	int max = 0;
	int count = 1;
	int resultMost;
	
	nums[N] = -9999;

	for (int i = 0; i < N; i++)
	{
		if (nums[i] == nums[i + 1])
		{
			count++;
		}
		else
		{
			if (count > max)
			{
				max = count;
				most[0] = nums[i];
				most[1] = -9999 ;
			}
			else if (count == max)
			{
				if (most[1] == -9999)
				{
					most[1] = nums[i];
				}
			}
			count = 1;
		}
	}

	if (most[1] != -9999)
	{
		resultMost = most[1];
	}
	else
	{
		resultMost = most[0];
	}

	
	range = nums[N - 1] - nums[0];


	//출력
	cout << average << "\n" << middle << "\n" 
		<< resultMost << "\n" << range;
}

최빈값을 구하는 과정에서 아주 많이 헤맸다.

평균을 구할 때 쓰는 sum 변수는 float 형이 아닌 double 형으로 선언했어야 했다.

+ Recent posts