Greedy 백준 알고리즘 자바 2875 ‘대회 or 인턴’ 문제풀이

1 minute read

Problem

백준대학교에서는 대회에 나갈 때 2명의 여학생과 1명의 남학생이 팀을 결성해서 나가는 것이 원칙이다. (왜인지는 총장님께 여쭈어보는 것이 좋겠다.) 백준대학교는 뛰어난 인재들이 많아 올해에도 N명의 여학생과 M명의 남학생이 팀원을 찾고 있다. 그런데 올해에는 대회에 참여하려는 학생들 중 K명을 반드시 인턴쉽 프로그램에 참여하라는 학교의 방침이 생기게 되었다. 인턴쉽에 참여하는 학생은 대회에 참여하지 못한다. 백준대학교에서는 뛰어난 인재들이 많기 때문에, 많은 팀을 만드는 것이 최선이다. 여러분은 N명의 여학생과 M명의 남학생, K명의 인턴쉽에 참여해야하는 인원이 주어질 때 만들 수 있는 최대의 팀 수를 구하면 된다.

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

Output 만들 수 있는 팀의 최댓값을 출력하면 된다.

Solution

  • 우선 k를 고려하지 않고 최대 팀 수를 구한다. 여자는 무조건 2명씩이고 남자는 무조건 1명씩이므로 n/2와 m중 가장 작은 수가 최대 팀의 수가 된다.
  • 팀을 구성하고 남은 사람들을 인턴으로 보낼 것이므로 k에서 빼준다. (n - max*2) + (m - max) = n + m - max*3
  • 만약 아직도 필요한 인턴 수가 있다면 (k > 0) 팀을 하나 해체하고 3명을 인턴십으로 보내버린다. 이 동작을 인턴십 모집 인원이 마감될 때까지 한다.

Code

import java.util.Scanner;
public class Main {
	public static void main(String[] args) {
		Scanner scan = new Scanner(System.in);
		int n = scan.nextInt(), m = scan.nextInt(), k = scan.nextInt();
		
		int max =  n/2 < m? n/2 : m; 
		k -= n + m - max*3;
		
		while(k > 0) {
			k -= 3; max--;
		}		
		System.out.print(max);
	}
}

Tags:

Updated: