RATIO 오답 케이스 질문

  • User Avatar
    AlKook

    [[problem:RATIO]] 문제에서 계속 오답이 발생하여 질문 드립니다.

    문제에서 주어지는 상수들을 받았을때 다음 승률까지의 연승횟수를
    변수로 하는 1차 방정식이 만들어지기에 계산하는 소스를 아래와 같이 작성하였습니다.

    어느 부분에서 오답이 나는지 힌트 좀 주세요.

    #include <iostream>
    #include <cmath>
    using namespace std;
    
    void solveCase(void)
    {
        int total = 0, win = 0, rate = 0;
        cin >> total >> win;
        rate = (float) win*100/total;
    
        if (rate >= 99) {
            cout << -1 << endl;
            return;
        }
    
        int target = rate+1;
        float answer = 0;
    
        answer = (float) ((target*total)-(100*win)) / (100-target);
    
        cout << (int) ceil(answer) << endl;
    
        return;
    }
    
    int main(void)
    {
        ios::sync_with_stdio(false);
        int cases = 0;
        cin >> cases;
        while(cases--)
        {
            solveCase();
        }
        return 0;
    }
    

    10년 전
3개의 댓글이 있습니다.
  • User Avatar
    coldradio

    rate에 처음 값을 넣을 때, float을 truncate해서 넣으셨는데요.
    값이 3이 나와야 하지만, float 표현력 한계상, 2.9999999999라고 나올 수도 있어, rate이 정확히 계산 안 될 수 있을 것 같습니다.
    그래서 나중에 계산하는 target에도 영향이 있을 듯 하네요.


    10년 전 link
  • User Avatar
    kcm1700

    C/C++에서 float은 10억*100이나 되는 정수를 정확히 표현하지 못합니다. 정밀도를 희생하면서 빠른 계산 속도가 필요한 경우 아니면 double을 쓰시는 게 좋아요. 그리고 이 문제는 굳이 float이나 double이 필요가 없어요.


    10년 전 link
  • User Avatar
    AlKook

    조언 감사합니다. 힌트 주신걸로 수정하여 통과했습니다.


    10년 전 link
  • 정회원 권한이 있어야 커멘트를 다실 수 있습니다. 정회원이 되시려면 온라인 저지에서 5문제 이상을 푸시고, 가입 후 7일 이상이 지나셔야 합니다. 현재 문제를 푸셨습니다.