XHAENEUNG 문제 질문 드려요

  • hanminjo
    hanminjo

    언어는 c++ 사용하고 있습니다.

    #include <stdio.h>
    #include <iostream>
    #include <string>
    #include <string.h>
    
    using namespace std;
    
    int convert_numberInTextform_to_arabicNumber(string);
    int string_arithmaticOperator_solver(int, int,string);
    
    int main(){
        int T;
        cin >> T;   // 몇 줄 받을지 입력받음.
        for (int i = 0; i < T; i++){
            string A, B, C, formula, arithmaticOperator;
    
            do{
                cin.clear();
                cin.ignore(cin.rdbuf()->in_avail());
            } while (cin.fail());   //cin 버퍼의 \n제거용.
    
    
            getline(cin,formula);   //답안 입력받음.
            if (formula == ""){
                cout << "No" << endl;
                continue;
            }
    
            int a=formula.find(" ");
            A = formula.substr(0, a);
    
            arithmaticOperator = formula.substr(a + 1,1);
    
            int b = formula.find("=");
            B = formula.substr(a + 3, b-a-4);
    
            C = formula.substr(b + 2);
    
            //ex) A : two, B : three, C=ivfe
            //arithmaticOperator = "+"
            //아래는 문자열로 입력된 숫자를 정수형으로 바꿔주고 정수형으로 답안을 비교하는 코드입니다.
            int correct_answer = string_arithmaticOperator_solver(convert_numberInTextform_to_arabicNumber(A), convert_numberInTextform_to_arabicNumber(B), arithmaticOperator);
            int answer = convert_numberInTextform_to_arabicNumber(C);
    
            if (answer == correct_answer && correct_answer!=-1 && answer!=-1){
                cout << "Yes" << endl;
            }
            else{
                cout << "No" << endl;
            }
        }
        return 0;
    }
    //"+"를 연산해주는 함수
    int string_arithmaticOperator_solver(int a, int b,string str){
        if (str.compare("+")==0){
            return a + b;
        }
        else if (str.compare("-")==0){
            return a - b;
        }
        else if (str.compare("*")==0){
            return a*b;
        }
        else{
            return -1;
        }
    }
    //버블정렬로 입력문자 재정렬 뒤 비교
    int convert_numberInTextform_to_arabicNumber(string a){
        for (int i = a.length(); i>0; i--){
            for (int j = 0; j < i-1; j++){
                if (strcmp(&(a.at(j)), &(a.at(j + 1))) > 0){
                    char tmp = NULL;
                    tmp = a.at(j);
                    a.at(j) = a.at(j + 1);
                    a.at(j + 1) = tmp;
                }
            }
        }
        if (a.compare("eorz")==0){
            return 0;
        }
        else if (a.compare("eno") == 0){
            return 1;
        }
        else if (a.compare("otw") == 0){
            return 2;
        }
        else if (a.compare("eehrt") == 0){
            return 3;
        }
        else if (a.compare("foru") == 0){
            return 4;
        }
        else if (a.compare("efiv") == 0){
            return 5;
        }
        else if (a.compare("isx") == 0){
            return 6;
        }
        else if (a.compare("eensv") == 0){
            return 7;
        }
        else if (a.compare("eghit") == 0){
            return 8;
        }
        else if (a.compare("einn") == 0){
            return 9;
        }
        else if (a.compare("ent") == 0){
            return 10;
        }
        else{
            return -1;
        }
    }
    

    오답이라고 나오는데 뭐가 문제일까요..?


    8년 전
2개의 댓글이 있습니다.
  • seico75
    seico75
    1. cin 버퍼에 \n 을 제거하는 것이 정상적으로 동작하지 않아 보입니다. codeblocks 로 돌려보면 처음에 무조건 No 가 하나 나오고 시작합니다. formula =="" 부분을 No 출력하지 말고 i-- 해서 continue 해버리는 것도 괜찮아 보입니다.
    2. char temp = NULL; 은 틀린 것 같습니다. 동작에는 상관없겠지만
    3. convert_numberInTextform_to_arabicNumber 함수 내에 strcmp 를 쓸 필요도 써서도 안될 것 같습니다. 문자의 대소만 비교하면 될 것 같네요.

    8년 전 link
  • hanminjo
    hanminjo

    감사합니다. i--로 돌려버리니 정답처리 되네요. strcmp도 쓸데없이 사용한 것 같군요


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