XHAENEUNG 문제질문입니다.

  • eubnara
    eubnara

    XHAENEUNG
    XHAENEUNG 문제입니다.
    저는 string으로 만들어서 비교할 생각을 하지 못했고,
    알파벳 소문자만 고려하였을때 26글자니까
    int alpha[26]으로 만든 후에 0으로 초기화하고 한 글자가 있을 때마다
    더하기를 해주어 몇글자가 있는지 체크하는 방식을 이용하였습니다.
    단어의 전체글자와 알파벳 구성 숫자가 같다면 순서가 바뀌어도 같은 단어가
    나올 것이라 생각했습니다.
    이 아이디어로 translate 함수를 구현한 것이고, 코드는 길지만
    오히려 직관적이어서 머릿속으로 깊게 생각할 필요는 없는 함수 입니다.

    Yes/No 출력문자도 처음에 실수해서(YES/NO라고해서) 고쳤지만, 여전히 오답이 뜹니다.

    ERROR를 출력하는 건 없어도 될듯하지만 지워도 큰 영향이 없습니다.
    result[i]값이 전부 1이나 -1로 되기 때문입니다.

    Yes/No를 출력하기 위해서 result배열에 1 또는 -1로 저장한 뒤
    1이면 Yes를
    -1이면 No를 출력하게 됩니다.

    댓글에 남겨진 다른분이 올려주신 16개의 예제는 오류 없이 출력됩니다.

    부디 오류를 찾아주세요 ㅜㅜ
    풀고싶습니다!!!

    {{bH1zRfxNUqHdUnYJ}}
    
    
    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
    int translate(char* inputs);
    
    int main(){
        int cases;
        int i;
        scanf("%d", &cases);
        int* result = (int*)malloc(sizeof(int)*cases);
        char num1[11];
        char num2[11];
        char oper1;
        char oper2;
        char num3[11];
        for(i=0;i<cases;i++){
            num1[0] = '\0';
            num2[0] = '\0';
            num3[0] = '\0';
            oper1 = '\0';
            oper2 = '\0';
            scanf("%s %c %s %c %s", num1, &oper1, num2, &oper2, num3);
            if (oper1 == '+' && oper2 == '=' ){
                if ((translate(num1) + translate(num2)) == translate(num3))
                    result[i] = 1;
                else
                    result[i] = -1;
            }
            else if (oper1 == '-'&&oper2 == '='){
                if ((translate(num1) - translate(num2)) == translate(num3))
                    result[i] = 1;
                else
                    result[i] = -1;
            }
            else if (oper1 == '*' && oper2 == '='){
                if ((translate(num1) * translate(num2)) == translate(num3))
                    result[i] = 1;
                else
                    result[i] = -1;
            }
            else{
                result[i] = -1;
            }
        }
        for (i = 0; i < cases; i++){
            if (result[i] == 1)
                printf("Yes\n");
            else if (result[i] == -1)
                printf("No\n");
            else
                printf("ERROR\n");
        }
        free(result);
        return 0;
    }
    
    int translate(char* inputs){
        int alpha[26] = { 0, };
        int i;
        for (i = 0; i < strlen(inputs); i++){
            if (inputs[i] >= 'a' || inputs[i] <= 'z'){
            }
            switch (inputs[i]){
            case 'a':
                alpha[0]++;
                break;
    
            case 'b':
                alpha[1]++;
                break;
    
            case 'c':
                alpha[2]++;
                break;
    
            case 'd':
                alpha[3]++;
                break;
    
            case 'e':
                alpha[4]++;
                break;
    
            case 'f':
                alpha[5]++;
                break;
    
            case 'g':
                alpha[6]++;
                break;
    
            case 'h':
                alpha[7]++;
                break;
    
            case 'i':
                alpha[8]++;
                break;
    
            case 'j':
                alpha[9]++;
                break;
    
            case 'k':
                alpha[10]++;
                break;
    
            case 'l':
                alpha[11]++;
                break;
    
            case 'm':
                alpha[12]++;
                break;
    
            case 'n':
                alpha[13]++;
                break;
    
            case 'o':
                alpha[14]++;
                break;
    
            case 'p':
                alpha[15]++;
                break;
    
            case 'q':
                alpha[16]++;
                break;
    
            case 'r':
                alpha[17]++;
                break;
    
            case 's':
                alpha[18]++;
                break;
    
            case 't':
                alpha[19]++;
                break;
    
            case 'u':
                alpha[20]++;
                break;
    
            case 'v':
                alpha[21]++;
                break;
    
            case 'w':
                alpha[22]++;
                break;
    
            case 'x':
                alpha[23]++;
                break;
    
            case 'y':
                alpha[24]++;
                break;
    
            case 'z':
                alpha[25]++;
                break;
    
            }
        }
        if (strlen(inputs) > 5 || strlen(inputs) < 3){
            return -1;
        }
        else if (strlen(inputs) == 3){
            if (alpha[4] == 1 && alpha[13] == 1 && alpha[14] == 1){
                return 1;
            }
            else if (alpha[19] == 1 && alpha[22] == 1 && alpha[14] == 1){
                return 2;
            }
            else if (alpha[18] == 1 && alpha[8] == 1 && alpha[23] == 1){
                return 6;
            }
            else if (alpha[19] == 1 && alpha[4] == 1 && alpha[13] == 1){
                return 10;
            }
        }
        else if (strlen(inputs) == 4){
            if (alpha[25] == 1 && alpha[4] == 1 && alpha[17] == 1 && alpha[14] == 1){
                return 0;
            }
            else if (alpha[5] == 1 && alpha[14] == 1 && alpha[20] == 1 && alpha[17] == 1){
                return 4;
            }
            else if (alpha[5] == 1 && alpha[8] == 1 && alpha[21] == 1 && alpha[4] == 1){
                return 5;
            }
            else if (alpha[13] == 2 && alpha[8] == 1 && alpha[4] == 1){
                return 9;
            }
        }
        else if (strlen(inputs) == 5){
            if (alpha[19] == 1 && alpha[7] == 1 && alpha[17] == 1 && alpha[4] == 2){
                return 3;
            }
            else if (alpha[18] == 1 && alpha[4] == 2 && alpha[21] == 1 && alpha[13] == 1){
                return 7;
            }
            else if (alpha[4] == 1 && alpha[8] == 1 && alpha[6] == 1 && alpha[7] == 1 && alpha[19] == 1){
                return 8;
            }
        }
        return -1;
    }
    
    
    {{DP6r6nGEg87uMJ7r}}
    

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

    two - three = wrong


    8년 전 link
  • eubnara
    eubnara

    감사합니다.. 한번에 찾아내시네요 대단하십니다.
    return 값을 -100으로 해버려서 zero에서 ten까지의 계산에서 나올 수 없는 값으로 대충 수정한다음에 정답은 통과했네요.
    치명적인 결함이네요...
    감사합니다!!!!


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