문제
문제 바로가기> BOJ 1918번: 후위 표기식
풀이
#include<iostream>
#include<string>
#include<stack>
#define MAX 32001
using namespace std;
int main() {
ios_base::sync_with_stdio(0); cin.tie(0);
string expr; cin >> expr;
stack<char> st; // 우선 순위가 낮은 연산자 (+, -) 부터 큰 연산자 (*, /) 순으로 쌓임
// 연산자 우선 순위 : () > *, / > +, -
for (int i = 0; i < expr.size(); i++) {
if (expr[i] == '+' || expr[i] == '-') {
while (!st.empty() && st.top()!='(') {
cout << st.top(); st.pop();
}
st.push(expr[i]);
}
else if (expr[i] == '*' || expr[i] == '/') {
while (!st.empty() && (st.top() == '*' || st.top() == '/')) {
cout << st.top(); st.pop();
}
st.push(expr[i]);
}
else if (expr[i] == '(') st.push(expr[i]);
else if (expr[i] == ')') {
while (st.top() != '(') {
cout << st.top();
st.pop();
} st.pop(); // '(' pop
}
else cout << expr[i]; // 알파벳 대문자
}
while (!st.empty()) { // 남은 연산자 출력
cout << st.top(); st.pop();
}
}
'문제 풀이 > 백준' 카테고리의 다른 글
BOJ 2636번: 치즈 (0) | 2023.03.18 |
---|---|
BOJ 2842번 : 집배원 한상덕 (0) | 2023.03.10 |
BOJ 21758번: 꿀 따기 (0) | 2023.02.25 |
BOJ16946번: 벽 부수고 이동하기 4 (0) | 2023.02.25 |
BOJ 17471번: 게리맨더링 (0) | 2023.02.23 |