Ratio문제 질문입니다.

  • ing0324
    ing0324

    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;

    public class Main {

    public static void main(String[] args) throws NumberFormatException,
            IOException {
    
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int cnt = Integer.parseInt(br.readLine());
        String[] line;
        StringBuffer a = new StringBuffer();
    
        int result,ratio;//필요한 연승수, 현재 승률
        double total, win; // 전체 게임수, 이긴 게임 수
        while (cnt-- > 0) {
    
            line = br.readLine().split("\\s");
            total = Integer.parseInt(line[0]);
    
            win = Integer.parseInt(line[1]);
            ratio =  (int)(win*100/total);
            if (total >= 1 && total <= 1000000000 && win >= 0 && win <= total) {
    
                result = (int) Math.ceil(total * total / (99 * total - 100 * win));
    
                if ( result > 2000000000 || ratio>=99) {
    
                    a.append(-1);
                } else {
    
                    a.append(result);
                }
    
    
    
            }
    
            else {
                a.append(-1);
            }
            a.append("\n");
    
        }
        if(a.length()>0){
            a.deleteCharAt(a.length()-1);
        }
        System.out.println(a);
    }

    }

    답으로 제출한 소스코드입니다.

    샘플입력값으로는 정상 결과가 나오는데 어느부분에서 틀린건지 감을 못잡겟네요

    체크해야되는조건이 틀린건지 아니면 애초에 수식을 잘못 만든건지 푸신분들 조언좀 부탁드립니다. ㅠㅠ


    10년 전
2개의 댓글이 있습니다.
  • lee890211
    lee890211

    샘플값은 다 딱딱 나눠떨어지는거라 저공식이 맞을수도있는데 예를들어 총 1000 이긴수 888 처럼 잘 안떨어지는거는 저공식대로 하시면 문제가있습니다. 저 공식에서 1으로 계산한부분을 내림하기전 %에서 다음 %까지의 거리(위의 예의경우 88.8% 에서 90% 까지의 거리로 측정)로 놓고 계산하시면 정답에 좀더 가까워 질듯합니다.
    result = (int) Math.ceil(total * total / (99 * total - 100 * win)); == > result = (int) Math.ceil(dist*total*total/((1-dist)*total-win) 보시면 질문자님의 답은 dist를 무조껀 0.01으로 대입했을때의 계산법이기때문에 1000 888 같이 내림이 생기는경우엔 맞지않습니다. 근데 방금 위에말한 방법대로 해도 오답이 뜨실겁니다. 테스트해보니까 실수부 표현방식때문에 원랜 x로 딱떨어지는데 x.000000000007 같이 실수부 오차때문에 x+1이 되는경우가있습니다. 저도 오차범위때문에 아직 풀진못했는데 혹시나 도움이 될까해서 올려봅니다.


    10년 전 link
  • ing0324
    ing0324

    제가 적용한 수식은 문제에서 요구하는 1%가 아니라 현재확률에서 1%를 올리는 수식이었네요.. 감사합니다


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