이분탐색을 통해 확률이 이전보다 오르는 값을 구한다.
처음에 int((Y/X) * 100) 으로 구현했는데 '틀렸습니다'만 나왔다. 근데 int((Y*100/X)), (Y*100)//X 는 정답이 나왔다.
>>> 0.1 * 0.1 == 0.01
False
python에서는 부동소수점 오차가 나서 정확하지 않다고 한다.
다른 방법도 찾아보니 decimal 을 사용하는 방법이 있었다.
>>> import decimal
>>> float(decimal.Decimal('0.1') * 3) == 0.3
True
다음부터 소수를 계산할때 생각하면서 해야겠다.
import sys
input = sys.stdin.readline
X, Y = map(int, input().split())
Z = (Y * 100) // X
if Z >= 99:
print(-1)
else:
answer = 0
left = 1
right = X
while left <= right:
mid = (left + right) // 2
if (Y+mid)*100 // (X+mid) <= Z:
left = mid+1
else:
answer = mid
right = mid - 1
print(answer)
'개발 > 알고리즘' 카테고리의 다른 글
[백준 2143] 두 배열의 합 (python) (0) | 2021.04.26 |
---|---|
[백준 1806] 부분합 (python) (0) | 2021.04.23 |
[백준 3055] 탈출 (python) (0) | 2021.04.22 |
[백준 1103] 게임 (python) (0) | 2021.04.22 |
[백준 15686] 치킨 배달 (python) (0) | 2021.04.22 |
최근댓글