[백준(Baekjoon)][자바(java)] 2875 : 대회 or 인턴 / 그리디

728x90

 

www.acmicpc.net/problem/2875

 

2875번: 대회 or 인턴

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

www.acmicpc.net

 

문제 풀이

 

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 n = Integer.parseInt( st.nextToken() ), m = Integer.parseInt( st.nextToken() ), k = Integer.parseInt( st.nextToken() );
		br.close();
		
		int t, r;  // cnt team, num remain 
		if( n == 0 || m == 0 )
			t = 0;
		else {
			t = Math.min( n/2 , m );
			r = (n+m) - (t*3);  // 전체 인원 수 - 대회 나가는 인원 수 
			while( r < k ) {
				t--;
				r += 3;
			}
		}
		
		System.out.println( t );

	}

}

 

*  그리디

-  대회에 참가할 수 있는 팀의 개수( t )는 n/2와 m 중 작은 수가 된다
-  전체 인원( n - m )에서 대회에 참가하는 인원수( t * 3 )를 빼고 남은 인원( r = (n-m)-(t*3) )중에서 인턴십에 참가해야 한다
-  하지만 남은 인원이( r ) 반드시 인턴십에 참가해야 하는 k명보다 적으면 이미 대회에 나가기로 결성된 팀원들 중에서 충원해야 한다

 

 

반응형