백준

[2875번] 대회 or 인턴

날아가는기억잡기 2020. 5. 3. 02:32

문제

백준대학교에서는 대회에 나갈 때 2명의 여학생과 1명의 남학생이 팀을 결성해서 나가는 것이 원칙이다. (왜인지는 총장님께 여쭈어보는 것이 좋겠다.)

백준대학교는 뛰어난 인재들이 많아 올해에도 N명의 여학생과 M명의 남학생이 팀원을 찾고 있다. 대회에 참여하려는 학생들 중 K명은 반드시 인턴쉽 프로그램에 참여해야 한다. 인턴쉽에 참여하는 학생은 대회에 참여하지 못한다.

백준대학교에서는 뛰어난 인재들이 많기 때문에, 많은 팀을 만드는 것이 최선이다.

여러분은 여학생의 수 N, 남학생의 수 M, 인턴쉽에 참여해야하는 인원 K가 주어질 때 만들 수 있는 최대의 팀 수를 구하면 된다.

 

입력

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

 

출력

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

 

나의 답

#include <bits/stdc++.h>

using namespace std;

int main(void) {
    int N, M, K, rest = 0;
    scanf("%d%d%d",&N,&M,&K);
    // 여자의 수가 홀수면 한 명을 나머지로 빼줌
    if(N%2==1) {
        N -= 1;
        rest += 1;
    }
    // 여자의 수가 남자의 수의 2배보다 많을 경우 팀을 이루지 못할 사람을 나머지로 빼줌
    if(N>2*M) {
        rest += N - 2*M;
        N = 2*M;
    }
    // 남자의 수가 여자의 수의 1/2배보다 많을 경우 팀을 이루지 못할 사람을 나머지로 빼줌
    else if(N<2*M) {
        rest = M - N/2;
        M = N/2;
    }
    // 인턴쉽에 필요한 인원이 나머지 인원보다 많을 경우 한 팀씩 해체 후 인턴십 인원에 더해줌
    while(K>rest) {
        rest += 3;
        M -= 1;
    }
    // 남자의 수 == 팀의 수이기 때문에 남자의 수를 출력
    printf("%d\n", M);
    return 0;
}

'백준' 카테고리의 다른 글

[16431번] 베시와 데이지  (0) 2020.05.03
[9461번] 파도반 수열  (0) 2020.05.03
[1629번] 곱셈  (0) 2020.05.03
[1110번] 더하기 사이클  (0) 2020.05.03
[1085번] 직사각형에서 탈출  (0) 2020.05.03