본문 바로가기

[BOJ] - JAVA

[백준] 2875 : 대회 or 인턴 JAVA 풀이

 

 

이 문제는 N과 M을 줄여나가는 방법과

K를 줄여나가는 두 가지 방법으로 풀 수 있다.

 

 

N과 M을 줄여나가는 방법

1. N M K를 입력받음

2. 팀의 개수를 세는 변수 cnt를 생성함

2. N>=2 && M>=1 && (N+M>=3+K)일 때만 팀을 만들 수 있음

   ( 한 팀에 여학생이 둘, 남학생이 하나가 포함되어야 하므로 N>=2 M>=1을 만족해야 함

      그리고 그  N+M이 새로 만들 팀의 총 인원인 3과 제외되어야 하는 K을 더한 것보다 작아서는 안됨 )

   위 조건을 만족한다면 cnt를 1 증가시키고 N은 2, M은 1을 감소시킴

3. cnt를 출력함   

 

import java.io.*;
import java.util.*;
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());
        int M = Integer.parseInt(st.nextToken());
        int K = Integer.parseInt(st.nextToken());
        int cnt = 0;
        while(N>=2&&M>=1&&(N+M>=3+K)){
            N -= 2;
            M -= 1;
            cnt++;
        }
        System.out.println(cnt);
    }
}

 

 

 

K를 줄여나가는 방법

 

1. 일단 N과 M으로 만들 수 있는 최대 팀 수 max를 구함

2. 1번 과정에서 팀을 배정받지 못한 인원수를 K에서 뺌 (인턴십에 나갈 사람을 최대한 걸러냄)

3. K가 0보다 크다면 배정이 완료됨 팀을 해체시켜야 함. 즉 max를 1씩, K를 3씩 줄이면 됨

4. 최종 max 값을 출력함

 

import java.io.*;
import java.util.*;
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());
        int M = Integer.parseInt(st.nextToken());
        int K = Integer.parseInt(st.nextToken());
        
        int max = (N/2 < M?N/2:M);
        
        K -= N+M-max*3;
        
        while(K>0){
            K -= 3;
            max--;
        }
        
        System.out.println(max);
    }
}