#include <iostream>
#include <cstring>
#include <stack>
#include <queue>
using namespace std;
char str[105];
queue <char> ans;
stack <char> s;
int operationLev(char op) {
if (op == '*' || op == '/') return 3;
else if (op == '+' || op == '-') return 1;
else return -1;
}
int main() {
cin >> str;
int length = strlen(str);
for (int i = 0; i < length; i++) {
if (str[i] == '*' || str[i] == '/' || str[i] == '+' || str[i] == '-') { //탐색한 문자가 *,+,-,/인 경우
while (!s.empty()) {
if (operationLev(str[i]) <= operationLev(s.top())
&& (s.top() == '+' || s.top() == '-' || s.top() == '*' || s.top() == '/')) { //현재연산자와 스택의 top 연산자 우선순위 비교
ans.push(s.top());
s.pop();
}
else break;
}
s.push(str[i]);
}
else if (str[i] == '(') s.push(str[i]); //탐색한 문자가 왼쪽 괄호인 경우 -> 바로 스택에 push
else if (str[i] == ')') { //탐색한 문자가 오른쪽 괄호인 경우 -> 왼쪽 괄호를 만날 때까지 스택을 pop하여 ans배열에 저장.
while (s.top() != '(') {
ans.push(s.top());
s.pop();
}
s.pop();
}
else ans.push(str[i]); // 탐색한 문자가 피연산자인 경우 바로 ans배열에 저장.
}
while (!s.empty()) {
ans.push(s.top());
s.pop();
}
while (!ans.empty()) {
cout << ans.front();
ans.pop();
}
return 0;
}
댓글남기기