[C++] 백준 1072 게임

semin·2023년 10월 11일

https://www.acmicpc.net/problem/1072
제목 : 게임
solved.ac 난이도 : Silver III

풀이

문제의 예시를 들어보겠습니다. 총 53게임 중 47회를 승리 했을 때의 소수점 내림한 승률은 88% 입니다.
승률을 구하는 식은 다음과 같습니다.

Y * 100 / X = Z ( Y = 승리 수, X = 총 게임 수 )

여기서 승률이 변한다고 하면 승률은 89%가 됩니다.
즉 승률을 Z라고 했을 때 승률이 변하면 Z+1이 됩니다.
n번의 추가 플레이를 통해 승률이 Z+1이 되려면 다음과 같은 식이 나옵니다.

(Y + n) * 100 / (X + n) = Z + 1

여기에 위 예시의 수를 대입을 해서 계산을 해보겠습니다.

(47 + n) * 100 / (53 + n) = 89
(4700 + 100n) / (53 + n) = 89
4700 + 100n = 4717 + 89n
-17 = -11n
1.5454... = n
n = 2

n은 횟수이고, 횟수는 소수가 될 수없기 때문에 소수 첫째 자리 수 에서 올림처리 해줍니다.
승률이 변하지 않을 때는 Z >= 99일 때 이므로 예외 처리를 해줘야 합니다.

코드

#include <iostream>
#include <cmath>

using namespace std;

double getrate(long double X, long double Y) {
    return floor(Y / X * 100);
}

int main()
{
    long double X, Y, Z;
    long long play = 0;
    cin >> X >> Y;
    Z = getrate(X, Y);
    if (Z >= 99) cout << -1;
    else {
        
        int count = ceil((Y * 100 - (Z + 1) * X) / (Z + 1 - 100));
        cout << count;
        
    }
}

profile
게임 프로그래밍 공부

0개의 댓글