알고리즘/PS
[백준 2875번][Java] 대회 or 인턴 - 간단한 방정식
johnna_endure
2020. 10. 4. 18:08
2875번: 대회 or 인턴
첫째 줄에 N, M, K가 순서대로 주어진다. (0 ≤ M ≤ 100, 0 ≤ N ≤ 100, 0 ≤ K ≤ M+N),
www.acmicpc.net
위에서 a값(인턴에 참가하는 남학생 수)를 구할 때, 정수가 아닌 값이 나올 수가 있다. a값은 팀의 수가 최대일 때의 값이므로 이 값에 최대한 가까운 정수값을 써야 한다. 간단하게 이 값을 반올림해주면 된다. (값이 범위를 넘어가는 경우에는 0 또는 k값을 반환하도록 처리해줘야 한다.)
그 다음은 남자, 여자 총원에서 a, k-a를 각각 빼주고 팀을 카운트하면 끝~
import java.io.*;
import java.util.ArrayList;
import java.util.List;
import java.util.StringTokenizer;
/*
대회 or 인턴
https://www.acmicpc.net/problem/2875
*/
public class Main {
static int n,m,k;
public static void main(String[] args) throws IOException {
// InputReader reader = new InputReader("testcase.txt");
InputReader reader = new InputReader();
StringTokenizer st = new StringTokenizer(reader.readLine());
n = Integer.parseInt(st.nextToken());
m = Integer.parseInt(st.nextToken());
k = Integer.parseInt(st.nextToken());
int a = Math.round((2*m + k - n)/3f);
if(a > k) a = k;
if(a < 0) a = 0;
int ret = makeTeam(n-k+a, m-a);
System.out.println(ret);
}
private static int makeTeam(int woman, int man) {
int teamCnt = 0;
while(woman >= 2 && man >= 1) {
woman -= 2;
man--;
teamCnt++;
}
// System.out.println(woman+ " "+man);
return teamCnt;
}
}
class InputReader {
private BufferedReader br;
public InputReader() {
br = new BufferedReader(new InputStreamReader(System.in));
}
public InputReader(String filepath) {
try {
br = new BufferedReader(new FileReader(filepath));
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
public List<Character> readLineIntoCharList() throws IOException {
List<Character> l = new ArrayList<>();
while(true) {
int readVal = br.read();
if(readVal == '\n' || readVal == -1) break;
l.add((char)readVal);
}
return l;
}
public boolean ready() throws IOException {
return br.ready();
}
public String readLine() throws IOException {
return br.readLine();
}
public int readInt() throws IOException {
return Integer.parseInt(readLine());
}
public Long readLong() throws IOException {
return Long.parseLong(readLine());
}
}