https://www.acmicpc.net/problem/1935
후위 표기식으로 쓰여진 식을 계산하는 문제.
중위 표기식을 후위 표기식으로 변환해야 했던 이전문제보다 훨씬 쉽다.
식의 글자를 하나씩 탐색하면서
1. 알파벳이 나왔을 경우 - 스택에 알파벳 push
2. 연산자가 나왔을 경우 - 스택에서 알파벳 두개 pop, 알파벳에 대응하는 숫자에 대해 연산자에 맞게 적절히 연산해주면 된다.
굳이 주의할 점이라면, 스택에서 알파벳 두개를 팝하는 순서가 연산의 순서와 거꾸로라는 점,
그리고 float이 아니라 double을 사용해야 한다는 점!
(문제에서 숫자 범위를 알려줬으면 더 친절한 문제일 것 같다는.. 생각..^ㅠ)
#include <iostream>
#include <string>
#include <stack>
using namespace std;
int num(char alpha) {
return alpha - 'A';
}
int main() {
int n;
string str;
double arr[26];
stack<double> s;
cin >> n >> str;
for (int i = 0; i < n; i++) cin >> arr[i];
for (int i = 0; i < str.length(); i++) {
char c = str[i];
if (c >= 'A' && c <= 'Z') s.push(arr[num(c)]);
else {
double num2 = s.top();
s.pop();
double num1 = s.top();
s.pop();
switch (c) {
case '+':
s.push(num1 + num2);
break;
case '-':
s.push(num1 - num2);
break;
case '*':
s.push(num1 * num2);
break;
case '/':
s.push(num1 / num2);
break;
}
}
}
printf("%.2lf", s.top());
}
'Algorithm > 백준' 카테고리의 다른 글
[백준] 2304번: 창고 다각형 (0) | 2020.03.22 |
---|---|
[백준] 1725번: 히스토그램 (0) | 2020.03.20 |
[백준] 1918번: 후위 표기식 (0) | 2020.03.19 |
[백준] 5430번: AC (0) | 2020.03.19 |
[백준] 3078번: 좋은 친구 (0) | 2020.03.19 |