https://www.acmicpc.net/problem/1072
문제 접근
다른 건 어렵지 않게 해결했으나 승률을 지정하는 방법에서 막혔다.
처음에 승률을 지정할 때 (double)Y / (double)X * 100로 지정해주었으나 이렇게 했을 경우 Y에 비해 X가 너무 크면 100을 곱하기도 전에 값이 0.000000..... 에 가까워져서 안된다고 하더라
그래서 (double)Y * 100 / (double)X 이렇게 100을 앞으로 당겨와서 곱해야 한다고 하더라
승리 횟수 구하는 과정
mid를 이긴 횟수와 전체 게임횟수에 똑같이 추가
이겼을 때 승률이 변하는가? 변하면 그 때의 승리 횟수를 저장, 더 적은 횟수로 이길 수 있는 지 체크하기 위해 right 당기기
변하지 않는다면 left를 당겨서 승리 횟수 증가시키기
import java.util.*;
import java.io.*;
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 X = Integer.parseInt(st.nextToken()); // 게임 횟수
int Y = Integer.parseInt(st.nextToken()); // 게임 이긴 횟수
long winRate = (long)Math.floor((double)Y * 100 / (double)X );
long left = 1;
long right = 1000000000;
long result = -1;
while(left <= right) {
long mid = (left + right) / 2;
long newRate = (long)Math.floor((double)(Y+mid)* 100 / (double)(X+mid) );
if(newRate > winRate) {
result = mid;
right = mid - 1;
}
else if(newRate <= winRate) {
left = mid + 1;
}
}
System.out.println(result);
}
}
'알고리즘 > 백준' 카테고리의 다른 글
[백준 14627 / 파닭 파닭 / JAVA / 이분 탐색] (0) | 2023.05.12 |
---|---|
[백준 2776 / 암기왕 / JAVA / 이분 탐색] (1) | 2023.05.11 |
[백준 15810 / 풍선 공장 / JAVA / 이분 탐색] (0) | 2023.05.09 |
[백준 / 그르다 김가놈 / JAVA / 이분 탐색] (0) | 2023.05.07 |
[백준 / 예산 / JAVA / 이진 탐색] (0) | 2023.05.06 |
댓글