[CCF 역년문제 풀이] 201903-224시.

30분 코드, 어디가 틀렸는지 몰라요.

#include 
#include 

using namespace std;


int main()
{
    int n;
    cin >> n;
    
    for(int i=0;i<n;i++)
    {
        string s;
        cin >> s;
        
        stack<char> sign;
        stack<int> nums;
        while(sign.size()) sign.pop();
        while(nums.size()) nums.pop();
        
        for(int j=0;j<s.size();j++)
        {
            if(s[j] >= '0' && s[j] <= '9') nums.push(s[j] - '0');
            else
            {
                if(s[j] == '+' || s[j] == '-') sign.push(s[j]);
                else
                {
                    int a = nums.top();
                    nums.pop();
                    if(s[j] == 'x') nums.push(a * (s[j + 1] - '0')) ;
                    else nums.push(a / (s[j + 1] - '0') ); 
                    j ++;
                }
            }
        }
        
        while(sign.size())
        {
            char c = sign.top();sign.pop();
            int a = nums.top(); nums.pop();
            int b = nums.top(); nums.pop();
            if(c == '+')
            {
                nums.push(a + b);
            }
            else nums.push(b- a); //       ,    
        }

        if(nums.top() == 24) cout<<"Yes"<<endl;
        else cout<<"No"<<endl;
    }
    
    return 0;
}

100점 코드


코드 사고방식: x와/선산, -변+
#include 
#include 

using namespace std;


int main()
{
    int n;
    cin >> n;
    
    for(int i=0;i<n;i++)
    {
        string s;
        cin >> s;
        
        stack<char> sign;
        stack<int> nums;

        
        for(int j=0;j<s.size();j++)
        {
            if(s[j] >= '0' && s[j] <= '9') nums.push(s[j] - '0');
            else
            {
                if(s[j] == '-') nums.push( -(s[j + 1] - '0')),j ++;
                else if(s[j] == 'x')
                {
                    int a = nums.top();
                    nums.pop();
                    nums.push(a * (s[j + 1] - '0'));
                    j ++;
                }
                else if(s[j] == '/')
                {
                    int a = nums.top();
                    nums.pop();
                    nums.push(a /(s[j + 1] - '0'));
                    j ++;
                }
            }
        }
        
        int sum = 0;
        while(nums.size()) sum += nums.top(), nums.pop();
        
        if(sum == 24) cout<<"Yes"<<endl;
        else cout<<"No"<<endl;
        
        
    }
    
    return 0;
}

좋은 웹페이지 즐겨찾기