#include<iostream>
#include<stack>
using namespace std;
int alpha[26];
int main(){
stack<double> s;
int N;
string str;
cin>>N;
cin>>str;
for(int i = 0; i < N; i++){
cin>>alpha[i];
}
for(int i = 0; i < str.length(); i++){
if(str[i] == '+' || str[i] == '-' || str[i] == '/' || str[i] == '*'){
double a = s.top();
s.pop();
double b = s.top(); // 스택에 있는 피연산자 2개를 빼오는 행위
s.pop();
switch (str[i])
{
case '+' : s.push(b+a);
break;
case '-' : s.push(b-a);
break;
case '/' : s.push(b/a);
break;
case '*' : s.push(b*a);
break;
}
}else{
s.push(alpha[str[i]-'A']);
}
}
double solution = s.top();
cout << fixed;
cout.precision(2);
cout<<solution<<endl;
return 0;
}
스택에 차례대로 피연산자를 넣게 되면 위 그림처럼 보입니다.
이 과정을 반복적으로 수행하게 되면 스택에는 결과 값이 고스란히 스택에 남겨 되는데 이를 소수점 둘째자리까지 출력하도록 합니다.
'BOJ 백준' 카테고리의 다른 글
백준 1068번 트리 (C, C++) (0) | 2022.06.25 |
---|---|
백준 11286, 절댓값 힙(C, C++) (0) | 2022.02.24 |
백준 21939번, 문제 추천 시스템 Version 1(C, C++) (0) | 2022.02.24 |
백준 2800번, 괄호 제거(C, C++) (0) | 2022.02.22 |
백준 2346번, 풍선 터뜨리기(C, C++) (0) | 2022.02.19 |