https://www.acmicpc.net/problem/1935
주어진 후위표기식을 어떻게하면 완벽한 계산이 나올까?
후위표기식이라는 것을 먼저 이해하면 손 쉽게 해결이 가능하다.
후위 표기식은 링크을 통해 간단하게 정리를 했으니 참고하면 좋을듯 하다.
#include<iostream>
#include<vector>
#include<stack>
using namespace std;
vector<int> vec;
stack<double> stk;
void calc(double num1, double num2, char oper) {
if(oper == '+') stk.push(num2+num1);
else if(oper =='-') stk.push(num2-num1);
else if(oper =='*') stk.push(num2*num1);
else stk.push(num2/num1);
}
int main() {
int N; cin>>N;
string s; cin>>s;
for(int i=0; i<N; i++) {
double num; cin>>num;
vec.push_back(num);
}
for(int i=0; i<s.size(); i++) {
if(s[i]>='A' && s[i]<='Z') { // 숫자
stk.push(vec[s[i]-'A']);
}
else { // 연산자
double num1 = stk.top(); stk.pop();
double num2 = stk.top(); stk.pop();
calc(num1, num2, s[i]);
}
}
cout<<fixed;
cout.precision(2);
cout<<stk.top();
return 0;
}