STARCRAFT 문제에 대하여 질문 드립니다.

  • dongjinKim
    dongjinKim

    저의 상황에서는
    맞았는데 오답이 나와서 질문 드립니다.

    어느 예시가 있는지 알려주시면 더욱 감사하겠습니다 ㅠㅠ

    import java.text.DecimalFormat;
    import java.util.*;
    import java.io.*;
    import java.math.*;

    public class Main {

    public static void main(String[] args) {
    
        ArrayList<Integer> result = new ArrayList<Integer>();
    
        Scanner input = new Scanner(System.in);
    
        int inputTestCase = input.nextInt();
    
        for (int i = 0; i < inputTestCase; i++) {
    
            double oneWinProb = input.nextInt();
            int winCount = input.nextInt();
    
            double winProb = 0;
    
            for(int j = 0; j < winCount; j++){
    
                winProb += (combinationCalculater((winCount + j - 1), j) * Math.pow((oneWinProb/100.0), winCount) * Math.pow((1 - (oneWinProb / 100.0)), j));
    
            }
    
            System.out.println("" +  winProb);
    
            result.add((int)Math.round(winProb*100));
        }
    
        for(int i = 0; i < inputTestCase; i++){
    
            System.out.println("" +  result.get(i));
    
        }
    }
    
    public static int combinationCalculater(int m, int n){
    
        int resultValue = 1;
    
        int molecule = 1;
    
        for(int i = 0; i < n; i++){
    
            molecule = (molecule * (m - i));
    
        }
    
        int denominator = 1;
    
        for(int i = 0; i < n; i++){
    
            denominator= (denominator * (i + 1));
        }
    
        resultValue = (molecule / denominator);
    
        return resultValue;
    }

    }


    8년 전
2개의 댓글이 있습니다.
  • pushbell7
    pushbell7

    출력하는 부분이 두부분인데요!
    그리고 콤비네이션 계산하실 때
    팩토리얼을 계산하신 다음에 나누는 식으로 하셨는데, 그러면 값이 너무 커질경우 오차가 발생할 수 있습니다.


    8년 전 link
  • dongjinKim
    dongjinKim

    질문에 답변 감사합니다.

    그 출력하는 또다른 부분은 먼가 확인할 때 들어간건데
    제출할때는 뺐던 부분이구요

    그 팩토리얼 계산 부분 바꾸어 봤는데 여전히 안되네요

    아래 식처럼 바꾸었는데 다른 문제가 있나요?

    답변 해주시면 감사합니다 ㅠㅠ

    public static int combinationCalculater(int m, int n){

    int resultValue = 1;
    
        int divider = 2;
    
        for(int i = 0; i < n; i++){
    
            resultValue = ( resultValue * (m - i));
    
            if((divider <= n) && ((resultValue % n) == 0)){
    
                resultValue = (resultValue / divider);
                divider++;
    
            }
        }
    
        return resultValue;
    }

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