RATIO 오답 케이스 질문

  • AlKook
    AlKook

    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;
    }
    

    8년 전
3개의 댓글이 있습니다.
  • coldradio
    coldradio

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


    8년 전 link
  • kcm1700
    kcm1700

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


    8년 전 link
  • AlKook
    AlKook

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


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