풀이
여학생의 수 N, 남학생의 수 M, 인턴쉽에 참여해야 하는 인원 K가 주어졌을 때,
인턴쉽에 참여해야 하는 인원을 고려하기 전 만들 수 있는 최대의 팀 수는 min(n / 2, m) 입니다.
여기서 잉여 인원은 학생 수에서 팀에 포함되는 학생 수(최대의 팀 수 * 3)를 빼주면 되겠죠..
K가 잉여 인원보다 작을 땐 문제가 되지 않습니다.
어차피 최대의 팀 수에는 영향을 끼치지 못하기 때문이죠.
K가 잉여 인원보다 클 때 빠져야 하는 인원수는 K - 잉여인원입니다.
최대의 팀 수에서 빠져야 하는 인원수 만큼 빼주면 됩니다.
1~3명만큼 빠져야 할 때 팀의 수가 하나 줄고, 4~6명만큼 빠져야 할 때 팀의 수가 둘 줄어야 합니다.
이 말인 즉슨 (K - 잉여인원) / 3이 줄어드는 팀의 수입니다.
#include<iostream>
using namespace std;
int main(void)
{
int n, m, k; cin >> n >> m >> k;
int tmp = min(n / 2, m);
int sur = n + m - (2 * tmp + tmp);
if (k <= sur) cout << tmp;
else {
tmp = tmp - ((k - sur + 2) / 3);
cout << tmp;
}
return 0;
}
반례
Input
10 5 7
Output
2
Input
25 37 10
Output
12
Input
100 100 50
Output
50
'알고리즘 > 백준' 카테고리의 다른 글
[백준/C,C++] 5585번: 거스름돈 (0) | 2021.04.20 |
---|---|
[백준/C,C++] 10610번: 30 (0) | 2021.04.20 |
[백준/C,C++] 1041번: 주사위 (0) | 2021.04.20 |
[백준/C,C++] 1059번: 좋은 구간 (2) | 2021.04.20 |
[백준/C,C++] 11726번: 2×n 타일링 (0) | 2021.04.20 |
댓글