[CCF 역년문제 풀이] 201903-224시.
20974 단어 CCF 역년 문제풀이
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;
}