https://www.acmicpc.net/problem/1072
input :
output :
맨 처음 입력 받은 Y / X 에 변화가 생길수 있는가?
{Y + (추가된 게임 판수) / X + (추가된 게임 판수)} 100
-> {Y / X} 100 와 다른가를 물어보는것.
주의해야 하는 것들
1. 현재 찾는것은 최소한의 판수 이다.
end에 집중하는 것이 아닌
start가 답이 된다는 것.
1패라도 존재한다면 99-> 100 이 될 수 없다.
예외처리가 필요.
나누기를 하면 실수 형이 나온다.
비교를 위해선 정수형으로 캐스팅 해주자.
import sys
X, Y = map(int, sys.stdin.readline().split())
pivot = int(Y * 100 / X)
start = 0
end = 1000000000
while start <= end:
mid = (start + end) // 2
compare = int((Y + mid) * 100 / (X + mid))
if compare > pivot:
end = mid - 1
else:
start = mid + 1
if pivot >= 99:
print(-1)
else:
print(start)
그리고 그냥 수학 식으로 계산을 시킬 수도 있다.
승률이 Z + 1 되기 위한 추가 판수가 K 이면 Z+1 = 100(Y+K/X+K) 이다.
따라서 K = ((Z+1)X - 100*Y)/(99-Z) 이러한 식을 만들어 낼수 있다.