1072번: 게임

김형택은 지금 몰래 Spider Solitaire(스파이더 카드놀이)를 하고 있다. 형택이는 이 게임을 이길 때도 있었지만, 질 때도 있었다. 누군가의 시선이 느껴진 형택이는 게임을 중단하고 코딩을 하기 시

www.acmicpc.net


 

이분탐색을 통해 확률이 이전보다 오르는 값을 구한다.

 

처음에 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
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기