본문 바로가기
알고리즘/백준

[백준/C,C++] 2875번: 대회 or 인턴

by 이민훈 2021. 4. 20.

www.acmicpc.net/problem/2875

 

2875번: 대회 or 인턴

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

www.acmicpc.net

풀이

여학생의 수 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

댓글