XHAENEUNG 문제 질문드립니다.

  • lerin
    lerin

    이틀째 XHAENEUNG을 계속 풀고 있는데 오답이 뜨는 원인을 모르겠습니다 ㅠㅠ.
    주어진 예제가 아닌 다른 예제도 넣어봤지만 딱히 오답을 찾을수가 없어서 글을 써봅니다.

    논리

    • 문자열로 입력된 수를 정렬한 후 0에서 10까지의 정렬된 문자열과 같은지 확인하여 숫자로 변환. 변환된 수를 가지고 계산식이 맞는지 검사
    #include <iostream>
    #include <string.h>
    
    
    int convertorForAnswer(int value, char answer[])
    {
        char temp;
    
        for (int i = 1; i < value; i++)
        {
            int j = i;
            temp = answer[j];
    
            while (--j >= 0 && temp < answer[j])
            {
                answer[j + 1] = answer[j];
            }           
            answer[j + 1] = temp;
        }   
    
        if (!strcmp(answer, "eorz")) return 0;
        else if (!strcmp(answer, "eno")) return 1;
        else if (!strcmp(answer, "otw")) return 2;
        else if (!strcmp(answer, "eehrt")) return 3;
        else if (!strcmp(answer, "foru")) return 4;
        else if (!strcmp(answer, "efiv")) return 5;
        else if (!strcmp(answer, "isx")) return 6;
        else if (!strcmp(answer, "eenvs")) return 7;
        else if (!strcmp(answer, "eghit")) return 8;
        else if (!strcmp(answer, "einn")) return 9;
        else if (!strcmp(answer, "ent")) return 10;
    
        return -1;
    }
    
    int main()
    {
        int value = 0;
        std::cin >> value;
    
        while (value)
        {
            char firstNumber[6] = {};
            std::cin >> firstNumber;
    
            char operation = ' ';
            std::cin >> operation;
    
            char secondNumber[6] = {};
            std::cin >> secondNumber;
    
            char operation1 = ' ';
            std::cin >> operation1;
    
            char answerNumber[11] = {};
            std::cin >> answerNumber;
    
    
            int first = 0;
            int second = 0;
            int answer = 0;
    
            int firstLength = 0;
            int secondLength = 0;
            int answerLength = 0;
    
            firstLength = strlen(firstNumber);
            secondLength = strlen(secondNumber);
            answerLength = strlen(answerNumber);
    
            first = convertorForAnswer(firstLength, firstNumber);
            second = convertorForAnswer(secondLength, secondNumber);
            answer = convertorForAnswer(answerLength,  answerNumber);
    
            switch (operation)
            {
            case '+':
            {
                first += second;
            }
                break;
            case '-':
            {
                first -= second;
            }
                break;
            case '*':
            {
                first *= second;
            }
                break;
            }
    
            if (first > 10 || first < 0 || first != answer)
            {
                std::cout << "No\n";
            }
            else
            {
                std::cout << "Yes\n";
            }
            --value;
        }
    
        return 0;
    }
    

    8년 전
1개의 댓글이 있습니다.
  • Being
    Being

    convertorForAnswer() 함수에 오류가 있습니다. 코드에 어떤 상수(문자열)을 넣을 때는 항상 주의하시고, 같은 실수를 반복하지 않으시려면 어떻게 하면 좋을지도 생각해보시면 공부가 될 것 같습니다.


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