[boj] 1935 후위 표기식2
Problem Solving
2020. 12. 8. 02:59
반응형
1935번: 후위 표기식2
첫째 줄에 피연산자의 개수(1 ≤ N ≤ 26) 가 주어진다. 그리고 둘째 줄에는 후위 표기식이 주어진다. (여기서 피연산자는 A~Z의 영대문자이며, A부터 순서대로 N개의 영대문자만이 사용되며, 길이
www.acmicpc.net
#include <iostream>
#include <string>
#include <queue>
#include <stack>
using namespace std;
queue<char> q;
stack<double> st;
int n;
string str;
double res;
double alpha[100];
double val;
double b;
double a;
int main()
{
cin >> n;
cin >> str;
for (int i = 0; i < (int)str.size(); i++)
q.push(str[i]);
for (int i = 0; i < n; i++)
{
cin >> val;
alpha['A' + i] = val;
}
for (int i = 0; i < (int)str.size(); i++)
{
if (q.front() >= 'A' && q.front() <= 'Z')
st.push(alpha[q.front()]);
else
{
b = st.top();
st.pop();
a = st.top();
st.pop();
if (q.front() == '+')
st.push((a + b));
else if (q.front() == '-')
st.push((a - b));
else if (q.front() == '*')
st.push((a * b));
else
st.push((a / b));
}
q.pop();
}
cout << fixed;
cout.precision(2);
cout << st.top() << endl;
return (0);
}
솔직히 이건 후위표기식 어떻게 하는 거지? 하고 알아보다가 굳이 코드가 아니더라도 솔루션이 다 나와있어서...
스택에 넣어둔 두개를 꺼내서 스택에서 나중에 나온 것을 처음에 나온 것으로 연산처리하고 다시 스택에 넣으면 되는... 문제였다.
그리고 문제를 또 잘못 읽어서 값이 순차적으로 ABC 이런식으로 될 줄 알았더니 CAB BCA 이런식으로도 스트링이 들어올 수 있어서
뜯어 고쳤고...
C++은 이번 PS하면서 처음이었기 때문에, 소숫점(precision)을 조정하고 고정하는 걸 따로 찾아서 배웠다.
반응형
'Problem Solving' 카테고리의 다른 글
[boj] 5397 키로거 (0) | 2020.12.12 |
---|---|
[boj] 2346 풍선 터뜨리기 (0) | 2020.12.11 |
[boj] 2164 카드2 (0) | 2020.12.07 |
[boj] 3986 좋은 단어 (0) | 2020.12.07 |
[boj] 2840 행운의 바퀴 (0) | 2020.12.05 |