728x90
전형적인 스택 문제다
입력값에 따른 케이스를 잘 분류해서 연산하면 답이 나온다
- c++
#include <iostream>
#include <stack>
#include <string>
using namespace std;
stack<char> st;
string input, answer;
int main() {
cin.tie(0);
ios_base::sync_with_stdio(0);
cin >> input;
for (int i = 0; i < input.length(); i++) {
if ('A' <= input[i] && input[i] <= 'Z') { // 피연산자
answer.push_back(input[i]);
} else { // 사칙연산자
switch (input[i]) {
case '*':
case '/':
while (!st.empty() && (st.top() == '*' || st.top() == '/')) {
answer.push_back(st.top());
st.pop();
}
st.push(input[i]);
break;
case '+':
case '-':
while (!st.empty() && st.top() != '(') {
answer.push_back(st.top());
st.pop();
}
st.push(input[i]);
break;
case '(':
st.push(input[i]);
break;
case ')':
while (!st.empty() && st.top() != '(') {
answer.push_back(st.top());
st.pop();
}
st.pop();
break;
}
}
}
while (!st.empty()) {
answer.push_back(st.top());
st.pop();
}
cout << answer;
return 0;
}
|
cs |
728x90
'PS' 카테고리의 다른 글
BOJ 2075 - N번째 큰 수 (0) | 2021.02.05 |
---|---|
BOJ 9328 - 열쇠 (0) | 2021.02.05 |
BOJ 1043 - 거짓말 (0) | 2021.02.04 |
BOJ 15961 - 회전 초밥 (0) | 2021.02.01 |
BOJ 16681 - 등산 (0) | 2021.01.31 |