238. Brokoen Partnership 질문용

  • Chaos.PP
    Chaos.PP

    고민고민 하다가 안되서 질문 올립니다...
    제가 이 문제를 어떻게 접근 했냐면 각 날짜가 지날때마다 입는 손실을 계산해서
    제안을 하는 사람에게 더해주는 방식으로 했습니다.
    예를 들어 M : 10, D : 1 이라고 하고 CUC가 제안을 하는 순서를 나타내면
    100000 - (100000 * 0.99) = 1000 창규 = 1000 남은 금액 99000
    99000 - (99000 * 0.99) = 990 의종 = 990 남은 금액 98010
    마지막 날이 되면 잔액을 마지막에 제안한 사람이 다 갖게 됩니다.
    창규 = 1000 + 98010 = 99010
    이런식으로 계산하면 예제에 나와있는 것도 다 정상적으로 출력되고, 제가 나름대로
    테스트한 입력에 대해서도 정상 출력하는데 이상하게도 WA 가 나와서 ㅠ.ㅠ.............
    아래에 소스 올립니다. 혹시 올바른 답이 나오지 않는 케이스 발견해 주시면 감사하겠습니다.
    #include
    #include
    #include
    #define MAX_MEMBER 200000
    ///////////////////////////////////////////////////////////////
    // 입력 제어
    ///////////////////////////////////////////////////////////////
    int GetNumCase()
    {
    int _T;
    scanf("%d", &_T);
    return _T;
    }
    void GetNumMD(int M, double *D)
    {
    scanf("%d", M);
    scanf("%lf\n", D);
    return;
    }
    char * InitArray()
    {
    int i=0;
    char *t;
    t = (char *)malloc(sizeof(char)
    (MAX_MEMBER));
    t[0] = 1;
    while (t[i] != '\n') {
    i++;
    scanf("%c", &t[i]);
    }
    t[i] = '\0';
    return t;
    }
    ///////////////////////////////////////////////////////////////
    // 알고리즘
    ///////////////////////////////////////////////////////////////
    double Division(char *C, int number, int _M, double D)
    {
    int i;
    double M, M_temp, cost=0;
    M_temp = (double) _M*10000;
    M = M_temp;
    for (i=1; i<number; i++) {
    M = M * (1-D);
    if (C[i] == 'C')
    cost = cost + (M_temp - M);
    M_temp = M;
    }
    if ( C[i] == 'C')
    cost = cost + M_temp;
    return cost;
    }
    ///////////////////////////////////////////////////////////////
    // 메인 함수
    ///////////////////////////////////////////////////////////////
    int main()
    {
    char *C, temp;
    int T, C_num, M, i;
    double cost, D=0.0;
    T = GetNumCase();
    for (i=0; i<T; i++) {
    GetNumMD(&M, &D);
    D = D/100;
    C = InitArray();
    C_num = strlen(C)-1;
    cost = Division(C, C_num, M, D);
    printf("%.1f\n", cost);
    free(C);
    }
    return 0;
    }

    [이 글은 과거 홈페이지에서 이전된 글입니다. 원문보기]

    14년 전
1개의 댓글이 있습니다.
  • JongMan
    JongMan

    알고리즘이 아니라 다른 부분을 틀리신 것 같은데 입출력 양식을 잘 읽어보세요. :-)


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