728x90
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가 되겠다.
'코딩' 카테고리의 다른 글
[BOJ] 백준 1059 좋은 구간 Python (0) | 2023.10.27 |
---|---|
[BOJ] 백준 2553 마지막 팩토리얼 수 Python (0) | 2023.10.27 |
[BOJ] 백준 28353 고양이카페 Python (1) | 2023.10.27 |
[BOJ] 백준 28294 프랙탈 Python (0) | 2023.10.27 |
[BOJ] 백준 29203 자릿수 Python (0) | 2023.10.27 |