Computer Science/Algorithm Problem

백준] 2875 - 대회 or 인턴(COCI 2010/2011)

TwinParadox 2018. 1. 30. 21:10
728x90

시간 제한 : 1초

메모리 제한 : 128MB




입력

첫째 줄에 N, M, K가 순서대로 주어진다. (0 ≤ M ≤ 100), (0 ≤ N ≤ 100), (0 ≤ K ≤ M+N),




출력

만들 수 있는 팀의 최대값을 출력하면 된다.




소스코드

#include <iostream>
using namespace std;
int main(void)
{
	int n, m, k, max, restN, restM;
	cin >> n >> m >> k;
	max = (n / 2) < m ? (n / 2) : m;
	restN = n - max * 2, restM = m - max;
	if (restN + restM >= k)
		cout << max;
	else
	{
		if ((k - restN - restM) % 3 == 0)
			max -= (k - restN - restM) / 3;
		else
			max -= (k - restN - restM) / 3 + 1;
		cout << max;
	}
}




Tip

그리디로 풀 수 있다. 최대한 팀을 유지하는 방향으로 설계하면 된다.

728x90