
후위표기법(postfix notation)에 대해 이해하고 있어야 하는 문제입니다.
이 링크에 들어가시면 후위표기법에 대해 이해하실 수 있습니다.
#include <iostream>
#include <stack>
int main()
{
int n;
std::string postfix;
std::stack<double> stack;
std::cin >> n;
std::cin >> postfix;
int* nums = new int[n];
for (int i = 0; i < n; i++)
std::cin >> nums[i];
for (const char c : postfix)
{
if (c >= 'A' && c <= 'Z')
stack.push(nums[c - 65]);
else
{
if (!stack.empty()) // 없어도됨
{
double firstNum = stack.top();
stack.pop();
double secondNum = stack.top();
stack.pop();
switch (c)
{
case '+':
stack.push(secondNum + firstNum);
break;
case '-':
stack.push(secondNum - firstNum);
break;
case '*':
stack.push(secondNum * firstNum);
break;
case '/':
stack.push(secondNum / firstNum);
break;
default:
break;
}
}
}
}
printf("%.2f", stack.top());
return 0;
}