티스토리 뷰
1. 문제 링크
https://www.acmicpc.net/problem/2875
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;
}
지적, 댓글 언제나 환영입니다~
'알고리즘 > Greedy' 카테고리의 다른 글
boj, 백준) 1135. 뉴스전하기 (C/C++) (0) | 2021.05.27 |
---|---|
boj, 백준) 3109 빵집 ( C++) (0) | 2020.02.28 |
boj, 백준) 2812 크게만들기( C, C++ ) (2) | 2020.02.28 |
boj, 백준) 1138 한줄로서기 (C++) (0) | 2020.02.14 |
boj,백준 ) 10610. 30 (C++) (0) | 2020.01.23 |
댓글