Computer Science/Algorithm Problem

백준] 2997 - 네 번째 수(COCI 2007/2008)

TwinParadox 2019. 2. 17. 18:04
728x90

시간 제한 : 1초

메모리 제한 : 128MB




입력

첫째 줄에 상근이가 고른 네 개의 숫자 중 세 개가 주어진다. 이 숫자는 크기 순이 아닐 수도 있고, -100보다 크거나 같고, 100보다 작거나 같은 정수이다.




출력

첫째 줄에 네 번째 숫자를 출력한다. 정답이 여러 개일 경우에는 아무거나 출력하면 된다. 또한 정답이 존재하지 않는 경우는 입력으로 주어지지 않는다.




소스코드

#include <algorithm>
#include <iostream>
#include <vector>
using namespace std;
int main(void)
{
	vector<int> arr(3);
	for (int i = 0; i < 3; i++)
		cin >> arr[i];
	sort(arr.begin(), arr.end());

	int d1, d2;
	d1 = arr[1] - arr[0];
	d2 = arr[2] - arr[1];

	int ans;
	if (d1 == d2)
		ans = arr[2] + d1;
	else
	{
		if (d1 > d2)
		{
			ans = arr[0] + d2;
		}
		else
		{
			ans = arr[1] + d1;
		}
	}
	cout << ans;
}




Tip

크기순으로 일단 정렬을 실시해주고, 등차수열을 이루기 위한 케이스를 찾아나서면 되는 문제다. 이미 주어진 숫자에 대한 차이값이 동일하다면, 그 값을 토대로 다음 값을 아무렇게나 계산해도 되지만, 두 개의 차이값이 다르다면 보다 큰 차이값을 보이는 수 사이에 수를 끼워넣는 식으로 풀어나간다.



728x90