BOJ 1072 게임

LONGNEW·2021년 1월 1일
0

BOJ

목록 보기
19/333
post-thumbnail

https://www.acmicpc.net/problem/1072

input :

  • X, Y ( 1 <= X <= 1,000,000,000)(0 <= Y <= X)

output :

  • 게임을 최소 몇 판 더 해야하는지 출력
    (Z가 변하지 않는다면 -1을 출력)

맨 처음 입력 받은 Y / X 에 변화가 생길수 있는가?
{Y + (추가된 게임 판수) / X + (추가된 게임 판수)} 100
-> {Y / X}
100 와 다른가를 물어보는것.

주의해야 하는 것들
1. 현재 찾는것은 최소한의 판수 이다.
end에 집중하는 것이 아닌
start가 답이 된다는 것.

  1. 1패라도 존재한다면 99-> 100 이 될 수 없다.
    예외처리가 필요.

  2. 나누기를 하면 실수 형이 나온다.
    비교를 위해선 정수형으로 캐스팅 해주자.

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) 이러한 식을 만들어 낼수 있다.

0개의 댓글