문제 출처: https://www.acmicpc.net/problem/1935
Silver 3
후위 표기식이란? 중위 표기식과 다르게 연산 부호가 후위에 있는 것을 말한다.
스택을 이용해 계산해주면 되는데, stack 특성상 먼저 나온게 B고 그 다음으로 나온걸 A라고 하고 계산하면 쉽다. EX) A/B
#include <iostream>
#include <string>
#include <cstring>
#include <stack>
using namespace std;
double arr[30];
stack<double> ans;
int main() {
int N;
cin >> N;
string str;
cin >> str;
for (int i = 0; i < N; i++) {
cin >> arr[i];
}
for (int i = 0; i < str.size(); i++) {
if (str[i] >= 'A' && str[i] <= 'Z') {
ans.push(arr[str[i] - 'A']);
}
else {
double b = ans.top();
ans.pop();
double a = ans.top();
ans.pop();
if (str[i] == '*') {
ans.push(a * b);
}
else if (str[i] == '+') {
ans.push(a + b);
}
else if (str[i] == '-') {
ans.push(a - b);
}
else {
ans.push(a / b);
}
}
}
printf("%.2lf", ans.top());
return 0;
}
자꾸 틀려서 아 뭔데? 했다가 데이터형을 double
로 바꾸니깐 통과됐다. 처음에 100까지래서 float(소수 6~8자리)으로 충분하겠지 했는데 착각이었다.. 0.3333나오는경우가 있어도 어차피 2자리만 나오니깐.. 흠 다음부턴 안전빵으로 처음부터 double로 선언해야겠다