백준 Baekjoon

[C언어] 백준 2875 : 대회 or 인턴

sujo 2020. 10. 19. 15:23

백준 2875 : 대회 or 인턴

 

문제 링크

www.acmicpc.net/problem/2875

 

2875번: 대회 or 인턴

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

www.acmicpc.net

 

 

문제 내용

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

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

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

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

 

 

Idea

  1. 우선 N과 M으로만 따졌을 때, 최대로 만들 수 있는 팀 수를 구한다.
  2. 팀을 만들고 남은 사람들은 K에 빼준다.
  3. 만약, K가 0보다 작거나 같다면 최대팀을 만들고 남은 사람들로도 인턴쉽에 참여할 수 있다는 뜻
  4. 만약, K가 0보다 크다면 인턴쉽에 갈 인원이 부족하다는 뜻이므로 K를 3명(여자2+남자1)단위로 나눈 몫을 최대 팀 수에서 빼준다.

 

 

Code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <stdio.h>
 
int main() {
    int N, M, K;
    scanf("%d %d %d"&N, &M, &K);
 
    //최대 몫 구하기
    int max = N / 2 < M ? N / 2 : M;
    
    //전체에서 최대값을 제외한 나머지 값을
    //K에 빼준다.
    K -= N + M - 3 * max;
 
    //K가 0보다 크다면
    //3으로 나눈 몫만큼 max에서 빼준다.
    if (K > 0) {
        K--;
        max -= K / 3 + 1;
    }
 
    printf("%d\n", max);
    return 0;
}
cs