티스토리 뷰

1. 문제 링크

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

 

2875번: 대회 or 인턴

문제 백준대학교에서는 대회에 나갈 때 2명의 여학생과 1명의 남학생이 팀을 결성해서 나가는 것이 원칙이다. (왜인지는 총장님께 여쭈어보는 것이 좋겠다.) 백준대학교는 뛰어난 인재들이 많아 올해에도 N명의 여학생과 M명의 남학생이 팀원을 찾고 있다. 그런데 올해에는 대회에 참여하려는 학생들 중 K명을 반드시 인턴쉽 프로그램에 참여하라는 학교의 방침이 생기게 되었다. 인턴쉽에 참여하는 학생은 대회에 참여하지 못한다. 백준대학교에서는 뛰어난 인재들이 많기 때문

www.acmicpc.net

2. 문제 개요

 여 2 남 1로 묶어서 1팀을 만들어 대회에 나갑니다.

하지만 인턴을 K 명 무조건 보내야 합니다.

남자 a, 여자b (a + b = k)를 적절히 분배하여 대회에 가장 많은 팀을 보내려고할때 팀의 최대값을 구하는 문제.

 

3. 문제 힌트!!

   남자a, 여자 b명을 어떻게 분배할 것인가?

a + b = k를 만족.

숫자의 범위가 그렇게 크지 않다는 것을 캐치하기.

 

 

4. 문제 풀기

범위가 크지 않다는 걸 캐치하여 a를 1 증가시키고 b를 1 감소시키는 그런 방법으로 접근했다.

즉, 인턴을 10명 보낸다고 할 때,

여자 10명을 다 보내는 경우 -> 여자 9명 남자 1명 -> 여자 8명 남자 2명 이런 식으로 풀이함.

 

5. 코드

#include <cstdio>
#include <algorithm>
using namespace std;

int woman, man, intern;
int ret = -1;
int w_intern, m_intern;

int main()
{
	scanf("%d %d %d", &woman, &man, &intern);

	w_intern = intern;
	m_intern = 0;

	for (m_intern = 0; m_intern <= intern; ++m_intern)
	{
		int tmp_woman = woman - w_intern;
		int tmp_man = man - m_intern;

		int w_cango = tmp_woman / 2;
		int m_cango = tmp_man;

		int tmp_ret = min(w_cango, m_cango);

		ret = max(ret, tmp_ret);
		w_intern--;
	}

	printf("%d", ret);
	return 0;
}

지적, 댓글 언제나 환영입니다~

댓글
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Total
Today
Yesterday