문제
https://www.acmicpc.net/problem/1072
설명
이제 형택이는 앞으로의 모든 게임에서 지지 않는다.
형택이의 승률이 절대 변하지 않는다면 -1을 출력한다.
만약 현재 승률이 99% 또는 100%라면 승률이 절대 변할 수 없으므로 -1을 출력한다.
현재 게임을 X번 했으므로 start를 1, end를 X로 하고 이분 탐색을 진행한다.
start와 end가 역전되기 전까지 mid를 계속해서 구해서 getPercent 함수를 이용해 최소 게임 수가 mid보다 작은 수인지 큰 수인지 판단한다.
long getPercent(long x, long y) {
return y * 100 / x;
}
void binarySearch() {
long start = 1;
long end = X;
long mid;
while (start <= end) {
mid = (start + end) / 2;
if (getPercent(X + mid, Y + mid) > Z) {
end = mid - 1;
}
else {
start = mid + 1;
}
}
System.out.println(start);
}
전체 코드
import java.io.*;
import java.util.StringTokenizer;
public class Main {
static long X, Y, Z;
static long getPercent(long x, long y) {
return y * 100 / x;
}
static void binarySearch() {
long start = 1;
long end = X;
long mid;
while (start <= end) {
mid = (start + end) / 2;
if (getPercent(X + mid, Y + mid) > Z) {
end = mid - 1;
}
else {
start = mid + 1;
}
}
System.out.println(start);
}
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
X = Long.parseLong(st.nextToken());
Y = Long.parseLong(st.nextToken());
Z = getPercent(X, Y);
// 99%와 100%는 확률이 변하지 않는다
if (Z >= 99)
System.out.println("-1");
else {
binarySearch();
}
}
}
728x90
반응형
'알고리즘 > 이분 탐색' 카테고리의 다른 글
[백준] 2096번 내려가기 (JAVA) (0) | 2023.02.22 |
---|---|
[CS] 투 포인터와 슬라이딩 윈도우 (0) | 2023.02.22 |
[백준] 2003번 수들의 합 2 (JAVA) (0) | 2023.02.22 |
[백준] 1806번 부분합 (JAVA) (0) | 2023.02.21 |
[CS] 이분 탐색 (JAVA) (0) | 2023.02.20 |