https://www.acmicpc.net/problem/2875
- 문제
- 문제 풀이
백준 2875번 대회 or 인턴은 브론즈 3 난이도의 수학 및 구현 문제이다. 이 문제는 난이도의 비해 정답률이 낮다. 이 문제에서는 여학생 2명과 남학생 1명이 팀을 이뤄서 대회를 치른다. 그리고 여학생 N명, 남학생 M명이 주어진다. 그리고 이 대회에서는 K명이 무조건 인턴에 참여해야 한다. 그리고 인턴에 참여하는 학생은 대회를 치를 수 없다. 이때 대회에 참여하는 최대 팀의 개수를 출력하면 된다.
이 문제는 처음에 되게 어려워 보일 수도 있다. 하지만 그렇게 어렵지 않으니 찬찬히 문제 풀이를 설명해 보도록 하겠다.
우선 인턴에 참여하는 학생들도 다 포함해서, 즉 k명을 빼기 전에 만들 수 있는 최대의 팀의 개수를 구한다. 이걸 int형 변수 team이라고 하겠다. 즉, team = Math.min (n / 2, m)이 된다.
team을 구하면 n에서 team을 만드는 데 사용한 여학생의 수, 즉 team × 2를 빼준다. 마찬가지로 m에서도 team을 만드는 데 사용한 남학생들을 빼준다. 따라서 n과 m은 다음과 같다.
n = n - team × 2
m = m - team
이렇게 하고 나면 가장 많은 팀을 이루고 남은 학생들의 수가 남는다. 그리고 여기서 인턴에 참여해야 하는 학생 수, k를 빼준다. 이 변수를 leftOver라고 하겠다. 즉, leftOver = n + m - k가 된다.
만약에 leftOver가 0 이상이면 인턴에 나가는 학생들을 다 빼고서도 가장 많은 팀을 만들었으므로 그대로 team을 출력하면 되다. 이제 leftOver가 음수인 경우를 살펴보겠다.
leftOver가 음수이면 team에서도 몇 명의 학생들을 빼줘야 한다는 말이다. 따라서 team에서 몇 개의 팀을 더 빼야 하는지를 구해보겠다. 이것은 leftOver를 3으로 나눈 값을 올림 한 값을 구해주면 된다. 이 변수를 minus라고 하겠다. 따라서 minus = Math.ceil(leftOver / 3)가 된다.
이제 team - minus를 한 값을 출력하면 되는데 team - minus가 음수이면 그냥 0을 출력하면 된다.
자세한 코드는 밑에서 참고할 수 있다.
- 코드
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 team = Math.min(n/2, m); //인턴 나가는 학생들도 포함해서 만들 수 있는 최대 팀의 개수
//최대 팀의 개수에 맞춰 학생 수를 빼준다
m -= team;
n -= 2*team;
int leftOver = n+m-k; // 남은 학생 수 - 인턴을 나가야 하는 학생 수
// leftOver가 0 이상이면 문제 없으므로 그대로 팀의 개수를 출력
if (leftOver >= 0) {
System.out.print(team);
} else { // leftOver가 음수이면
leftOver = Math.abs(leftOver);
int minus = (int)Math.ceil((double)leftOver / 3.0);
if (team - minus >= 0) {
System.out.print(team-minus);
} else {
System.out.print(0);
}
}
}
}
'백준' 카테고리의 다른 글
[백준] 11382번 : 꼬마 정민 – JAVA [자바] (0) | 2022.08.07 |
---|---|
[백준] 2754번 : 학점계산 – JAVA [자바] (0) | 2022.08.07 |
[백준] 2010번 : 플러그 – JAVA [자바] (0) | 2022.08.07 |
[백준] 10807번 : 개수 세기 – JAVA [자바] (0) | 2022.08.06 |
[백준] 5597번 : 과제 안 내신 분..? – JAVA [자바] (0) | 2022.08.06 |
댓글