XHAENEUNG 문제 질문합니다!!

  • gkwhdgns
    gkwhdgns

    안녕하세요!

    XHAENEUNG 문제가 잘 해결되지 않아 질문합니다.

    1. 입력받은 문자열을 각각 ASCII코드로 바꾸어 알파벳인 경우와 연산자를 나눈다.
    2. 알파벳이면 alphabet배열에 수를 센다.
    3. 빈칸(' ')인 경우, 모아두었던 alphabet을 수로 바꾼다.
    4. 연산하여 true/false인 경우를 나눈다.
    5. 결과에 따라 "Yes", "No"를 출력한다.

      이 과정으로 문제 풀이를 진행하였습니다.
      오답으로 나오는데 어느 부분에서 문제인지 정확히 모르겠습니다.
      문제 생기는 부분을 아시면 답변 부탁드립니다.

      감사합니다.

    #include <stdio.h>
    #include <string.h>
    
    bool reArrange(char* string);
    int getNumber(int* alphebet);
    bool operation(int num1, int num2, char op, int result);
    
    int main(){
    
        int num = 0;
        int a = scanf("%d\n", &num);
    
        for(int i=0; i<num; i++){
    
            char string[100] = {};
            char *p;
            //a = scanf("%[^\n]s", string);
            char *t = fgets(string, sizeof(string)-1, stdin);
            if( (p=strchr(string, '\n')) != NULL ) *p = '\0';
    
            bool result = reArrange(string);
    
            if(result){
                printf("Yes\n");
            }else{
                printf("No\n");
            }
        }
    
        return 0;
    }
    
    bool reArrange(char* string){
    
        int count = 0;
        int alphabet[26] = {0};
    
        int num1 = -2;
        int num2 = -2;
        int result = -2;
        char myOperator;
    
        while(string[count]){
    
            int temp = string[count];
    
            if(temp >= 97 && temp <= 122){ // alphebet
    
                alphabet[temp-97]++;
    
            }else if(temp == 42 || temp == 43 || temp == 45  || temp == 47){ // +_*/
    
                myOperator = string[count];
                count++;
    
            }else if(temp == 32){ // ' '
    
                int number = getNumber(alphabet);
    
                if(number == -1){ // not 0 to 10
                    return false;
                }else if(num1 == -2){
                    num1 = number;
                }else if(num2 == -2){
                    num2 = number;
                }
    
                for(int i=0; i< 26; i++){ // initialize
                    alphabet[i] = 0;
                }
    
            }else if(temp == 61){ // =
                count++;
            }
    
            count++;
    
        }
    
        // last number
        result = getNumber(alphabet);
    
        return operation(num1, num2, myOperator, result);
    }
    
    int getNumber(int* alphebet){
    
        int result = -1;
    
        if(alphebet[25] == 1 && alphebet[4] == 1 && alphebet[17] == 1 && alphebet[14] == 1){ // 0
            result = 0;
        }else if(alphebet[14] == 1 && alphebet[13] == 1 && alphebet[4] == 1){ // 1
            result = 1;
        }else if(alphebet[19] == 1 && alphebet[22] == 1 && alphebet[14] == 1){ // 2
            result = 2;
        }else if(alphebet[19] == 1 && alphebet[7] == 1 && alphebet[17] == 1 && alphebet[4] == 2){ // 3
            result = 3;
        }else if(alphebet[5] == 1 && alphebet[14] == 1 && alphebet[20] == 1 && alphebet[17] == 1){ // 4
            result = 4;
        }else if(alphebet[5] == 1 && alphebet[8] == 1 && alphebet[21] == 1 && alphebet[4] == 1){ // 5
            result = 5;
        }else if(alphebet[18] == 1 && alphebet[8] == 1 && alphebet[23] == 1){ // 6
            result = 6;
        }else if(alphebet[18] == 1 && alphebet[4] == 2 && alphebet[21] == 1 && alphebet[13] == 1){ // 7
            result = 7;
        }else if(alphebet[4] == 1 && alphebet[8] == 1 && alphebet[6] == 1 && alphebet[7] == 1 && alphebet[19] == 1){ // 8
            result = 8;
        }else if(alphebet[13] == 2 && alphebet[8] == 1 && alphebet[4] == 1){ // 9
            result = 9;
        }else if(alphebet[19] == 1 && alphebet[4] == 1 && alphebet[13] == 1){ // 10
            result = 10;
        }
    
        return result;
    }
    
    bool operation(int num1, int num2, char op, int result){
    
        int answer;
    
        if(op == '+'){
    
            answer = num1 + num2;
    
        }else if(op == '*'){
    
            answer = num1 * num2;
    
        }else if(op == '-'){
    
            answer = num1 - num2;
    
        }else if(op == '/'){
    
            if(num2 == 0){
                return false;
            }
    
            answer = num1 / num2;
    
        }else{
            return false;
        }
    
        if(answer == result){
            return true;
        }
    
        return false;
    }
    

    9년 전
1개의 댓글이 있습니다.
  • gkwhdgns
    gkwhdgns

    문자열을 입력받는 과정에서 오류가 있었던 것 같습니다.
    다른 방식으로 하여 문제를 풀었습니다. 감사합니다.


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