XHAENEUNG 문제 질문드립니다.

  • 토째비
    토째비

    문제 질문드립니다.
    본 문제에 해당하는 요건을 만족했다고 생각했는데 오답으로 자꾸 표시가 됩니다. 도움 부탁드립니다.

    특이사항.
    1. 0<= x <= 10 예외처리는 하였습니다.
    2. 문자열 정렬 후 비교도 하였습니다.

    코드입니다.

    #include <iostream>
    #include <string>
    #include <algorithm>
    
    using namespace std;
    
    #define NumSize 11
    
    bool checkInWord(string, string[]);
    bool checkSortWord(string, string[], int);
    bool getResultValue(int, int, string, string[]);
    int getNumber(string, string[]);
    
    int main(void)
    {
        int number = 0;
        string numName[NumSize] = { "zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "ten" };
    
        cin >> number;
        while (number--)
        {
            string s_fstWord, s_sndWord, s_result;
            string s_operation, s_equals;
            int i_fstWord, i_sndWord;
    
            cin >> s_fstWord >> s_operation >> s_sndWord >> s_equals >> s_result;
    
            if (!checkInWord(s_fstWord, numName))
            {
                cout << "No" << endl;
                continue;
            }
            if (!checkInWord(s_sndWord, numName))
            {
                cout << "No" << endl;
                continue;
            }
            if (checkInWord(s_result, numName))
            {
                cout << "No" << endl;
                continue;
            }
    
            i_fstWord = getNumber(s_fstWord, numName);
            i_sndWord = getNumber(s_sndWord, numName);
    
            if (!getResultValue(i_fstWord, i_sndWord, s_operation, numName)) {
                cout << "No" << endl;
                continue;
            }
            if (!checkSortWord(s_result, numName, i_fstWord + i_sndWord))
            {
                cout << "No" << endl;
                continue;
            }
    
            cout << "Yes" << endl;
        }
    
        return 0;
    }
    
    bool checkInWord(string word, string numberList[]) {
        bool flag = false;
        for (int i = 0; i < NumSize; i++)
        {
            if (word == numberList[i])
            {
                flag = true;
            }
        }
        if (!flag) {
            return flag;
        }
    
        return flag;
    }
    
    bool checkSortWord(string word, string numberList[], int num) {
        string comp_string = numberList[num];
        string target_string = word;
        sort(comp_string.begin(), comp_string.end());
        sort(target_string.begin(), target_string.end());
    
        if (comp_string == target_string) return false;
    
        return true;
    
    }
    
    bool getResultValue(int fst, int snd, string operation, string numberList[])
    {
        int result = -1;
    
        if (operation == "+")
        {
            result = fst + snd;
            if (result > 10 || result < 0)
            {
                return false;
            }
        }
        else if (operation == "-")
        {
            result = fst - snd;
            if (result > 10 || result < 0)
            {
                return false;
            }
        }
        else if (operation == "*")
        {
            result = fst * snd;
            if (result > 10 || result < 0)
            {
                return false;
            }
    
        }
        return true;
    }
    
    int getNumber(string word, string numberList[]) {
        for (int i = 0; i < NumSize; i++)
        {
            if (word == numberList[i])
            {
                return i;
            }
        }
        return -1;
    }
    

    7년 전
2개의 댓글이 있습니다.
  • Corea
    Corea

    코딩에 실수가 있네요. 답안을 제출하시기 전에 다양한 입력을 만들어보시는게 도움이 됩니다. 다음 예제가 되지 않습니다.

    1
    one * one = one

    7년 전 link
  • 토째비
    토째비

    해결했습니다.

    문제의 라인 '처음으로 채점할 답지를 받아는 xhae는 오랜 ICPC의 경험으로 인해서인지 xhae는 채점을 할 때 답안에 오자가 있을 경우 가차 없이 이를 오답으로 채점했다. 예를 들어 "four"를 "fuor" 로 잘못 쓴 것을 오답으로 채점하였다. 하지만 채점 결과를 확인한 많은 학부형의 항의로 인해 xhae는 절충해서 다음과 같이 채점을 하려고 한다. 만약 답이 'seven'일 경우 적은 알파벳의 문자의 수가 동일하고(여기서는 's' 1개, 'e' 2개, 'v' 1개 그리고 'n' 1개), 순서가 뒤섞여 있는 경우까지는 정답으로 간주하기로 했다.'

    라는 라인을 이해를 잘못해서 발생한 문제였습니다.

    답변감사합니다.


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