1. 문제

1072번: 게임



2. 개요

현재 X번 게임을 하여 Y번 승리하였다. 이후 게임에서 항상 승리한다고 할 때, 소수점 이하를 버린 승률 Z가 더 커지는 최소 승리 횟수를 구하는 문제.



3. 풀이 및 코드

3-1. 풀이

이분탐색을 이용해 최소횟수를 구한다.

3-2. Python

import sys

X, Y = map(int, sys.stdin.readline().split())
Z = Y * 100 // X 

if Z >= 99:
    print(-1)

else:
    l, r = 1, X
    answer = 0

    while l <= r:
        mid = (l + r) // 2

        if (Y + mid) * 100 // (X + mid) > Z:
            answer = mid
            r = mid - 1

        else:
            l = mid + 1

    print(answer)

3-3. C#

namespace boj_1072
{
    internal class Program
    {
        static void Main(string[] args)
        {
            string[] input = Console.ReadLine().Split();

            long X = long.Parse(input[0]), Y = long.Parse(input[1]);
            long Z = Y * 100 / X;

            if (Z >= 99)
                Console.WriteLine(-1);

            else
            {
                long l = 1, r = X;
                long answer = 0;

                while (l <= r)
                {
                    long mid = (l + r) / 2;

                    if ((Y + mid) * 100 / (X + mid) > Z)
                    {
                        answer = mid;
                        r = mid - 1;
                    }

                    else
                    {
                        l = mid + 1;
                    }
                }

                Console.WriteLine(answer);
            }
        }
    }
}

Comments