

-Code
import java.io.*;
import java.util.*;
public class BOJ31416 {
public static void main(String[] args) throws IOException {
BufferedReader br =
new BufferedReader(new InputStreamReader(System.in));
int testCase = Integer.parseInt(br.readLine());
for (int test = 0; test < testCase; test++) {
StringTokenizer st = new StringTokenizer(br.readLine());
int t_a = Integer.parseInt(st.nextToken());
int t_b = Integer.parseInt(st.nextToken());
int v_a = Integer.parseInt(st.nextToken());
int v_b = Integer.parseInt(st.nextToken());
int bTestTime = t_b * v_b;
int aTestTime = t_a * v_a;
if (aTestTime > bTestTime) {
// 도훈이 오기전 상훈이가 끈낸 테스트 갯수
int doneATest = bTestTime / t_a;
int sanghunTime = doneATest * t_a;
int dohunTime = bTestTime;
// 남은 과제의 갯수
int remainA = v_a - doneATest;
// 남은 과제 수행
for (int i = 0; i < remainA; i++) {
if (sanghunTime + t_a <= dohunTime + t_a) {
sanghunTime += t_a;
} else {
dohunTime += t_a;
}
}
System.out.println(Math.max(sanghunTime, dohunTime));
} else {
// b가 더 크거나 같은 경우는 같이 작업하는 경우가 없음
System.out.println(bTestTime);
}
}
br.close();
}
}
처음에 b테스트 타임을 구하고 이후 그 시간의 차이만큼을 구해 바로 동시에 a 테스트를 진행하는 방식으로 구하려 했으나 이러면 계산을 안 해야 하는 경우에도 계산을 하게 되었습니다. 그래서 a 테스트가 남아 있는 경우 계산을 하도록 했고 그 과정에서 상훈이가 b테스트가 끝났을 때 진행하고 있는 경우에 대해 생각하다 로직이 꼬여서 힌트를 찾아봤습니다.
그 결과 그냥 for문으로 남은 테스트만큼 확인을 하는데 테스트 후 시간을 2개 비교해서 상훈이 작거나 같으면 상훈에 더해주고 아니면 도훈에 더해주었습니다. 그 결과 중 최댓값이 모든 테스트를 끝낸 경우이므로 해당 값을 출력해 주면 되었습니다.
'Beakjoon&프로그래머스 > Java' 카테고리의 다른 글
| [백준/Java] 14721번 성적표 (0) | 2026.03.07 |
|---|---|
| [백준/Java] 10181번 Federation Favorites (0) | 2026.03.07 |
| [백준/Java] 2304번 창고 다각형 (0) | 2026.03.06 |
| [백준/Java] 1522번 문자열 교환 (0) | 2026.03.05 |
| [백준/Java] 26577번 Math (0) | 2026.03.05 |