XHAENEUNG 문제 질문드립니다.

  • jykim3353
    jykim3353

    주어진 테스트케이스 말고도 여러 테스트 값을 넣어보았을 때 출력값이 올바르게 나오는데, 제출시에는 오답으로 뜹니다.

    입력되는 A값과 B값은 올바른 문자열로 들어온다는 전제를 바탕으로 앞 두글자를 switch 문으로 처리하여 숫자로 변환하고, 다양한 값이 올 수 있는 C값은 문자열을 일단 퀵정렬을 사용해 오름차순으로 정렬한 뒤, 사전에 오름차순으로 정렬 해둔 문자열 배열과 비교해 같을경우 YES로 처리, 아닐 경우 NO로 처리하고 있습니다.
    연산결과 값이 0보다 작거나 10보다 클 경우에는 정렬과정 전에 NO를 출력하고 다음 테스트케이스로 넘어가도록 되어있습니다.

    어디를 고치면 정답이 될까요? 한참을 붙잡고 있는데 도저히 감이 안옵니다. 도와주세요 ㅠㅠ

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    int _cmp(const void * a, const void * b){
        return *(char*)a - *(char*)b;
    }
    
    int StoNum(char * string){
        switch (string[0]){
        case 'z':
            return 0;
        case 'o':
            return 1;
        case 't':
            switch (string[1]){
            case 'w':
                return 2;
            case 'h':
                return 3;
            case 'e':
                return 10;
            }
            break;
        case 'f':
            switch (string[1]){
            case 'o':
                return 4;
            case 'i':
                return 5;
            }
            break;
        case 's':
            switch (string[1]){
            case 'i':
                return 6;
            case 'e':
                return 7;
            }
            break;
        case 'e':
            return 8;
        case 'n':
            return 9;
        }
        return -1;
    }
    
    int _add(int a, int b){
        return a + b;
    }
    int _sub(int a, int b){
        return a - b;
    }
    int _mul(int a, int b){
        return a * b;
    }
    
    int cal(int a, int b, char operation){
        int(*func[4])(int a, int b) = { _mul, _add, 0, _sub};
        return func[operation - '*'](a, b);
    }
    
    int main(void){
        int N, i, a, b, c, length;
        char num_string[11][6] = { { "eorz" }, { "eno" }, { "otw" }, { "eehrt" }, { "foru" }, { "efiv" }, { "isx" }, { "eensv" }, { "eghit" }, { "einn" }, { "ent" } };
        char A[6], B[6], operation, dummy, C[11];;
        scanf("%d", &N);
        while (N--){
            for (i = 0; i < 11; i++) C[i] = 0;
            for (i = 0; i < 6; i++) A[i] = B[i] = 0;
            scanf("%s %c %s %c %s", A, &operation, B, &dummy, C);
            a = StoNum(A);
            b = StoNum(B);
            c = cal(a, b, operation);
            if ((c < 0) || (10 < c)) {
                printf("NO\n");
                continue;
            }
            qsort(C, strlen(C), sizeof(char), _cmp);
            if (!(strcmp(num_string[c], C))) printf("YES\n");
            else printf("NO\n");
        }
        return 0;
    }
    

    10년 전
3개의 댓글이 있습니다.
  • 일루
    일루

    출력이 대소문자가 달라보이는군요. 그 외엔 별 문제가 없이 보이긴 하는데...


    10년 전 link
  • jykim3353
    jykim3353

    /일루 지적해주신대로 출력 대소문자 문제였습니다. 와... 뭐가 틀린걸까 한참 고민하고있었는데 저런 곳에서 틀렸었다니. 다음 부터는 더 꼼꼼하게 봐야겠습니다. 정말 감사합니다!!!!


    10년 전 link
  • 일루
    일루

    넵 ^^ 그와는 별개로 StoNum 함수는 아래쪽 qsort/strcmp 부분을 재활용하셔도 될 것 같습니다.


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