백준 1072번 - 게임

@ckdhkdwns · April 27, 2023 · 1 min read

문제의 목적은 승률 zz를 1 증가시키기 위해 최소한 몇 번 이겨야 하는지를 구하는 것입니다.

  • 처음 승률 z=yx×100z = \cfrac{y}{x} \times 100
  • 승률을 1 증가시키기 위해 게임을 α\alpha번 진행했을 때 승률 z+1=y+αx+α×100z + 1 = \cfrac{y + \alpha}{x + \alpha} \times 100

최소 게임 수를 구하기 위해 식을 α\alpha에 대한 식으로 정리해줍니다.

z+1=y+αx+α×100z + 1 = \cfrac{y + \alpha}{x + \alpha} \times 100 (z+1)(x+α)=100y+100α(z + 1)(x + \alpha) = 100y + 100\alpha (z+1)α100α=100y(z+1)x(z + 1)\alpha - 100\alpha = 100y - (z + 1)x α=100y(z+1)xz99\therefore \alpha = \cfrac{100y - (z + 1)x}{z - 99}

x,y,zx, y, z를 대입시켜 α\alpha를 구해줍니다. 여기서 α\alpha의 값이 소수가 되는 경우에는 값을 올림해줘서 최소 게임 수를 구합니다.
단, 확률이 99% 이상인 경우에는 더 이상 승률을 증가시킬 수 없습니다. 이 때는 -1을 출력합니다.

#1072번-게임
import sys
import math

x, y = map(int, sys.stdin.readline().split())
z = int(100 * y / x)

if z >= 99:
  print(-1)
else:
  print(math.ceil((100 * y - (z + 1) * x) / (z - 99)))
@ckdhkdwns
developer blog