Programming/Algorithm

[Java] 백준 2875 대회 or 인턴

Yejii 2021. 3. 10. 20:48

 

문제

대회에 나갈 수 있는 1 팀은 여자2 남자1로 구성되어 있다.

여자는 총 m명 남자는 총 n명이 있다고 할 때 m+n명중 k명은 반드시 인턴에 참여해야한다.

인턴에 참여한 인원은 대회에 참가할 수 없다고 할 때, 만들 수 있는 최대 팀수를 구하는 문제이다. 

 

 

풀이

- 먼저 만들 수 있는 팀 수의 최댓값(teams)을 구한다.

   - 만들 수 있는 팀의 개수는 '총 여자 수/2(1팀에 최소로 들어가야하는 여자 수)'와 총 남자 수/1(1팀에 최소로 들어가야 하는 남자 수)' 중 더 작은 값이다.

   - int teams = Math.min(M/2, N/1)

- 총 인원에서 팀에 속한 사람들 (teams * 3)을 뺀 나머지 인원을 구한다. 

   - 이 인원이 K보다 크거나 같아야 K명 이상이 인턴에 참여가능한 것이다.

- 해당 조건을 만족하는 가장 큰 teams값을 구해서 출력한다.

 

 

 

코드

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine());
        int M = Integer.parseInt(st.nextToken());
        int N = Integer.parseInt(st.nextToken());
        int K = Integer.parseInt(st.nextToken());

        int teams = Math.min(M / 2, N);
        while(true){
            if (M + N - 3 * teams >= K)
                break;
            teams -= 1;
        }

        System.out.println(teams);
    }
}