
https://www.acmicpc.net/problem/1935

후위 표기식으로 표기된 명령을 수행하면 된다.
후위 표기식을ㄹ 수행하기 위해서는 stack을 이용하면 된다.
push한다.pop한다.push한다.이걸 반복하면 스택에 마지막으로 남은 값이 연산의 결과가 된다.
얼마전에 자구 공부함 ㅎㅎ
그래서 이걸 스택에 넣어서 푼다.
여기서 해결해야 하는 포인트는 크게 두 가지
후위 표기식을 앞에서부터 계산했을 때, 식의 결과와 중간 결과가 -20억보다 크거나 같고, 20억보다 작거나 같은 입력만 주어진다.
-> 결과값과 스택에 들어갈 값들을 double로 선언해줘야 한다.
피연산자들을 ABCDE... 처럼 대문자를 이용해서 치환했다. 이걸 이용하기 위해 난 unordered_map을 이용해서 명령(order)에 있는 문자와 입력받은 숫자를 연결해줬다.
그래서 풀면 아래와 같다
#include <iostream>
#include <stack>
#include <unordered_map>
using namespace std;
int main()
{
stack<double> st;
int N;
string order;
double answer;
cin >> N;
cin >> order;
unordered_map<char, int> um;
int num;
char alpha = 'A';
for (int i = 0; i < N; i++) {
cin >> num;
um[alpha++] = num;
}
for (int i = 0; i < order.length(); i++) {
if (isalpha(order[i])) {
st.push((double)um[order[i]]);
}
else {
double rhs = st.top();
st.pop();
double lhs = st.top();
st.pop();
if (order[i] == '+') st.push(lhs + rhs);
else if (order[i] == '-') st.push(lhs - rhs);
else if (order[i] == '*') st.push(lhs * rhs);
else if (order[i] == '/') st.push(lhs / rhs);
}
}
printf("%.2f\n", st.top());
}