1 분 소요

Question

2108Q


Solution

  • 입력 받은 숫자들을 vector에 저장
  • vector를 오름차순으로 정렬한다.
  • 평균 값은 ‘round();’를 활용하여 반올림 시켜 정수형으로 만든다.
  • 중앙 값은 (숫자의 개수 / 2)로 나오는 idx 이다.
  • 최빈 값을 찾기 위해 arr[8001]을 선언 (절댓값은 4000을 넘지 않음)
  • arr[4000] = 0 을 기준으로 4001부터 양수, 3999부터 음수를 받는다.
  • 범위 값은 최댓값에서 최솟값을 빼면 된다.

Cord

#include <iostream>
#include <vector>
#include <algorithm>
#include <math.h>

using namespace std;

int arr[8001] = { 0 };

int main()
{
	int sum = 0;
	int count = -9999;
	int value = 0;
	bool flag = false;

	// 입력
	int input;
	cin >> input;

	// 각 수들을 vector에 저장
	vector<float> vNums;
	for (int idx = 0; idx < input; idx++)
	{
		int num;
		cin >> num;
		vNums.push_back(num);
		sum += num;

		arr[num + 4000]++;
	}

	// 오름차순 정렬
	sort(vNums.begin(), vNums.end());

	// 산술 평균
	int avg = round(sum / (float)vNums.size());
	cout << avg << '\n';

	// 중앙 값
	cout << vNums[vNums.size() / 2] << '\n';

	// 최빈 값
	for (int idx = 0; idx < 8001; idx++)
	{
		if (arr[idx] == 0) { continue; }

		// 가장많이 나온 수중에 두번째로 작은 값 찾기 (flag)
		if (arr[idx] == count)
		{
			if (flag)
			{
				value = idx - 4000;
				flag = false;
			}
		}
		if (arr[idx] > count)
		{
			count = arr[idx];
			value = idx - 4000;
			flag = true;
		}

	}
	cout << value << '\n';

	// 범위 값
	cout << vNums[vNums.size() - 1] - vNums[0];

	return 0;
}

Result

2108

태그: ,

카테고리:

업데이트: