[백준/BOJ] 백준 2548번 : 대표 자연수

2020. 9. 18. 01:08알고리즘 문제풀이

www.acmicpc.net/problem/2548

 

2548번: 대표 자연수

첫째 줄에는 자연수의 개수 N이 입력된다. N은 1 이상 20,000 이하이다. 둘째 줄에는 N개의 자연수가 빈칸을 사이에 두고 입력되며, 이 수들은 모두 1 이상 10,000 이하이다.

www.acmicpc.net

숫자들을 하나씩 확인하며 대표 자연수를 구한다.

 

코드

#include <iostream>
#include <algorithm>
#include <vector>
#include <stdlib.h>
#include <set>
using namespace std;

int n;
vector<int> input_list;

//temp와 다른 수들과 차이들의 합을 구한다
int Calc(int temp)
{
	int ret = 0;

	for (int i = 0; i < input_list.size(); i++)
	{
		ret += abs(input_list[i] - temp);
	}

	return ret;
}

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

	int input;
	set<int> number;
	set<int>::iterator it;
	int min_value = 987654321;
	int result;

	cin >> n;

	for (int i = 0; i < n; i++)
	{
		cin >> input;
		input_list.push_back(input);
		number.insert(input); //set에 넣어 중복된 수는 넣지 않도록 하여 입력된 숫자를 저장한다
	}

	//수들을 확인하며 대표 자연수를 구한다
	for (it = number.begin(); it != number.end(); it++)
	{
		int this_value = Calc(*it);

		//지금까지 구한 차이들의 합 보다 더 작은 차이들의 합을 구했을때
		if (min_value > this_value)
		{
			min_value = this_value;
			result = (*it);
		}
	}

	cout << result;

	return 0;
}