이 문제는 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);
}
}
'[BOJ] - JAVA' 카테고리의 다른 글
[백준] 2783 : 삼각 김밥 JAVA 풀이 (0) | 2022.11.02 |
---|---|
[백준] 1783 : 병든 나이트 JAVA 풀이 (0) | 2022.10.30 |
[백준] 11047 : 동전 0 JAVA 풀이 (0) | 2022.10.28 |
[백준] 11399 : ATM JAVA 풀이 (0) | 2022.10.28 |
[백준] 1707 : 이분 그래프 JAVA 풀이 (0) | 2022.10.28 |