공부하기/백준

[Java] 백준 풀기 1072 - 게임

XEV 2024. 5. 11. 22:47

자바 백준 1072번

실버 3

https://www.acmicpc.net/problem/1072

 

 

 

 

 

문제 보기

분류: 수학, 이분 탐색

 

 

 

 

 

코드 풀이

import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
// 게임 횟수와 이긴 게임 수를 입력
long X = sc.nextLong();
long Y = sc.nextLong();
// 추가 게임 횟수를 계산하는 메서드 호출
long additionalGames = findAdditionalGames(X, Y);
// 결과 출력
System.out.println(additionalGames);
}
// 형택이가 추가로 플레이해야 할 게임 횟수를 이분 탐색으로 계산하는 메서드
private static long findAdditionalGames(long X, long Y) {
// 이분 탐색을 위한 범위 설정
long left = 0;
long right = 1000000001;
// 이분 탐색 진행
while (left < right) {
long mid = (left + right) / 2;
long win = Y + mid; // 이긴 게임 수에 추가 게임 횟수 더함
long total = X + mid; // 전체 게임 수에 추가 게임 횟수 더함
long winRate = win * 100 / total; // 현재 승률 계산
// 승률이 변하지 않는 경우, 추가 게임 횟수를 늘려야 함
if (winRate <= Y * 100 / X) {
left = mid + 1;
} else { // 승률이 변하는 경우, 추가 게임 횟수를 줄여야 함
right = mid;
}
}
if (left == 1000000001) {
// 만약 승률이 절대 변하지 않는 경우
return -1;
} else {
// 그렇지 않은 경우 추가 게임 횟수 반환
return left;
}
}
}