아래는 내가 쓴 코드
import sys
import math
from decimal import Decimal
input = sys.stdin.readline
X,Y = map(int,input().split())
Z = int(Decimal(Y* 100/X))
if Z == 99 or Z == 100:
print(-1)
else:
a = Decimal((100*Y - X - Z*X)/(Z-99))
result = Decimal(int((100*Y - X - Z*X)/(Z-99)) )
if result - a == 0:
print(result)
else:
print(result + 1)
역시 이런 문제는 부동소수점을 보았을 때 오차가 생길 수 있는데,
그것을 얼마나 "잘" 컨트롤 하느냐에 따른 것 같다.
Decimal을 활용하여 최대한 오차가 없도록 유의했다.
한편, if 이후의 식인데 이는 평범하게 방정식을 풀은 것으로,
Z <= 100*Y / X < Z+1 로 주어진 상황에서
Z + 1 <= 100(Y+a)/(X+a)가 되는 "최소의" a 를 찾는 것 이므로,
사실 그렇게 어려운 상황은 아니다.
위의 방정식을 풀다보면, (Z-99) or (99-Z)가 나올 수 있는데,
이 점이 가능 / 불가능을 나누는 Boundary가 되겠다.