XHAENEUNG (째능교육) 도움의 손길을...

  • Roger
    Roger

    http://www.algospot.com/judge/problem/read/XHAENEUNG
    튜토리얼 마지막 문제.. 째능 교육 문제입니다.

    입출력 부분이라던지 대소문자 같은 부분까지 전부 체크 해봤는데 왜 오답이 나오는지 알 수가 없습니다.

    우선 주요 코드는 다음과 같습니다.

    int main()
    {
    int nCase, nLeft, nRight, nResult;
    char strLeft[11], strOperation[2], strRight[11], strResult[11];

    char* pch;
    
    cin >> nCase;
    
    
    while(nCase--)
    {
        cin >> strLeft >> strOperation >> strRight >> strResult >> strResult;
    
        if(strcmp(strLeft, "zero") == 0 )
        {
            nLeft = 0;
        }
        else if(strcmp(strLeft, "one") == 0)
        {
            nLeft = 1;
        }
        else if(strcmp(strLeft, "two") == 0)
        {
            nLeft = 2;
        }
        else if(strcmp(strLeft, "three") == 0)
        {
            nLeft = 3;
        }
        else if(strcmp(strLeft, "four") == 0)
        {
            nLeft = 4;
        }
        else if(strcmp(strLeft, "five") == 0)
        {
            nLeft = 5;
        }
        else if(strcmp(strLeft, "six") == 0)
        {
            nLeft = 6;
        }
        else if(strcmp(strLeft, "seven") == 0)
        {
            nLeft = 7;
        }
        else if(strcmp(strLeft, "eight") == 0)
        {
            nLeft = 8;
        }
        else if(strcmp(strLeft, "nine") == 0)
        {
            nLeft = 9;
        }
        else if(strcmp(strLeft, "ten") == 0)
        {
            nLeft = 10;
        }
    
        if(strcmp(strRight, "zero") == 0 )
        {
            nRight = 0;
        }
        else if(strcmp(strRight, "one") == 0)
        {
            nRight = 1;
        }
        else if(strcmp(strRight, "two") == 0)
        {
            nRight = 2;
        }
        else if(strcmp(strRight, "three") == 0)
        {
            nRight = 3;
        }
        else if(strcmp(strRight, "four") == 0)
        {
            nRight = 4;
        }
        else if(strcmp(strRight, "five") == 0)
        {
            nRight = 5;
        }
        else if(strcmp(strRight, "six") == 0)
        {
            nRight = 6;
        }
        else if(strcmp(strRight, "seven") == 0)
        {
            nRight = 7;
        }
        else if(strcmp(strRight, "eight") == 0)
        {
            nRight = 8;
        }
        else if(strcmp(strRight, "nine") == 0)
        {
            nRight = 9;
        }
        else if(strcmp(strRight, "ten") == 0)
        {
            nRight = 10;
        }
    
        sort(strResult, strResult + strlen(strResult));
    
        if(strcmp(strResult, "eorz") == 0 )
        {
            nResult = 0;
        }
        else if(strcmp(strResult, "eno") == 0)
        {
            nResult = 1;
        }
        else if(strcmp(strResult, "otw") == 0)
        {
            nResult = 2;
        }
        else if(strcmp(strResult, "eehrt") == 0)
        {
            nResult = 3;
        }
        else if(strcmp(strResult, "foru") == 0)
        {
            nResult = 4;
        }
        else if(strcmp(strResult, "efiv") == 0)
        {
            nResult = 5;
        }
        else if(strcmp(strResult, "isx") == 0)
        {
            nResult = 6;
        }
        else if(strcmp(strResult, "eensv") == 0)
        {
            nResult = 7;
        }
        else if(strcmp(strResult, "eghit") == 0)
        {
            nResult = 8;
        }
        else if(strcmp(strResult, "einn") == 0)
        {
            nResult = 9;
        }
        else if(strcmp(strResult, "ent") == 0)
        {
            nResult = 10;
        }
    
        int nTemp;
    
        if(strOperation[0] == '+')
        {
            nTemp = nLeft + nRight;
        }
        else if(strOperation[0] == '-')
        {
            nTemp = nLeft - nRight;
        }
        else if(strOperation[0] == '*')
        {
            nTemp = nLeft * nRight;
        }
        else if(strOperation[0] == '/')
        {
            nTemp = nLeft / nRight;
        }
    
        if(nTemp == nResult)
        {
            cout << "Yes"  << endl;
        }
        else
        {
            cout << "No" << endl;
        }
    }

    }

    보다시피... 조건문을 남발했습니다.

    마지막 윗 부분을 보시면, 입력받은 답의 문자열을 정렬한 값으로 판단하기 때문에 strcmp 조건이 "eorz", "eno" 이렇게 되있는 겁니다.

    오답이라고 할 건덕지가 없는데 답답합니다. 도와주십시요...헝..


    10년 전
4개의 댓글이 있습니다.
  • hyunhwan
    hyunhwan

    우선 초기화는 잘 해주시는게 좋습니다.

    문제에 정확히 언급이 되어있지 않아서, 문제를 약간 수정했습니다. 해당 코드의 문제는 nResult를 수정하는 조건문에 포함되지 않을 경우 nResult값이, 이전의 값으로 유지가 됩니다. 그래서 오답이 발생할 가능성이 있습니다.

    마지막으로 코드 포매팅 형식을 잘 지켜주셨으면 좋겠네요.


    10년 전 link
  • Roger
    Roger

    nLeft, nRight, nResult 선언 부분을 while 안으로 넣고 0으로 초기화 해봤지만... 그대로 입니다. 새로 짜보겠습니다


    10년 전 link
  • Roger
    Roger

    드디어 정답을 받았습니다ㅎㅎㅎㅎ
    변수 초기화와 예외처리의 중요성을 깨달았습니다.


    10년 전 link
  • wookayin
    wookayin

    코드를 중복을 없애고 좀 더 예쁘게 정돈될 수 있도록 짜시면 많은 도움이 될 겁니다. 다른 사람들 어떻게 짰는지 '꼭' 한번 쭉 둘러 보세요.

    변수 초기화는 안 할 수 있으면 더욱 좋습니다. (매번 스코프에 선언)


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