[문제 링크]

 

1072번: 게임

각 줄에 X와 Y가 주어진다. X는 1,000,000,000보다 작거나 같은 자연수이고, Y는 0보다 크거나 같고, X보다 작거나 같은 자연수이다.

www.acmicpc.net


입력되는 숫자가 1~10억까지이므로 하나하나 검사하면 시간초과가 날 것이 분명하기 때문에 이분탐색을 이용해 풀었다.

충분히 큰 숫자(30억?)부터 시작해 이분탐색으로 더하기 전과 더한 후와 퍼센트가 일치하는 middle 구간을 찾고, 그 구간을 시작으로 1씩 더해가면서 퍼센트가 변하는 middle값을 찾으면 그 값이 정답이 된다.

추가적으로 입력받은 값의 승률이 99퍼센트 이상이면 아무리 더해도 100퍼센트가 나올 수 없기 때문에 불가능(-1)을 리턴 해주었다. 


#include <iostream>
using namespace std;
 
const long long MAX = 3000000000;
long long X, Y;
 
long long Solution()
{
    int winRate = (Y * 100/ X;
    if (winRate >= 99return -1;
    long long start = 0end = MAX;
    int result = -1;
    while (start <= end)
    {
        long long middle = (start + end/ 2;
        int tempWinRate = ((Y + middle) * 100/ (X + middle);
        if (tempWinRate == winRate)
        {
            result = middle + 1;
            start = middle + 1;
        }
        else
            end = middle - 1;
    }
    return result;
}
int main(void)
{
    cin >> X >> Y;
    cout << Solution() << endl;
    return 0;
}
http://colorscripter.com/info#e" target="_blank" style="color:#e5e5e5text-decoration:none">Colored by Color Scripter

알고리즘 200일 프로젝트 - 22day

내일도 열심히!

'알고리즘 > BOJ' 카테고리의 다른 글

백준 1062번: 가르침  (0) 2020.04.29
백준 6679번: 싱기한 네자리 숫자  (0) 2020.04.28
백준 7453번: 합이 0인 네 정수  (0) 2020.04.26
백준 1038번: 감소하는 수  (0) 2020.04.25
백준 1051번 : 숫자 정사각형  (0) 2020.04.24

+ Recent posts