https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV14tDX6AFgCFAYD
#문제 간단 정리
기존의 후위 표기법 변환과 같다
괄호 사용함에 주의하자
#문제 해결 방법
#전체 코드
#include <iostream>
#include <stack>
#include <cctype>
using namespace std;
int precedence(char op) {
if (op == '*' || op == '/') return 2;
if (op == '+' || op == '-') return 1;
return 0;
}
int main() {
ios_base::sync_with_stdio(0);
cin.tie(0); cout.tie(0);
for (int tc = 1; tc <= 10; tc++) {
int t; cin >> t;
string s;
cin >> s;
stack<char> st;
string output;
for (int i = 0; i < s.length(); i++) {
char now = s[i];
if (isdigit(now)) {
output += now;
}
else if (now == '(') {
st.push(now);
}
else if (now == ')') {
while (!st.empty() && st.top() != '(') {
output += st.top();
st.pop();
}
st.pop();
}
else {
while (!st.empty() && precedence(st.top()) >= precedence(now)) {
output += st.top();
st.pop();
}
st.push(now);
}
}
while (!st.empty()) {
output += st.top();
st.pop();
}
//cout << output << '\n';
//계산
stack<int> st2;
for (int i = 0; i < output.length(); i++) {
char now = output[i];
if (isdigit(now)) {
st2.push(now - '0');
}
else {
char temp = output[i];
int second = st2.top();
st2.pop();
int first = st2.top();
st2.pop();
if (temp == '+') {
st2.push(first + second);
}
else if (temp == '-') {
st2.push(first - second);
}
else if (temp == '*') {
st2.push(first * second);
}
else if (temp == '/') {
st2.push(first / second);
}
}
}
cout << '#' << tc << ' ' << st2.top() << '\n';
}
return 0;
}
'[SW Expert Academy]' 카테고리의 다른 글
SW Expert Academy 1267. [S/W 문제해결 응용] 10일차 - 작업순서[C++] (0) | 2024.05.15 |
---|---|
SW Expert Academy 1219. [S/W 문제해결 기본] 4일차 - 길찾기[C++] (0) | 2024.04.06 |
SW Expert Academy 1218.[S/W 문제해결 기본] 4일차 - 괄호 짝짓기[C++] (0) | 2024.04.05 |
SW Expert Academy [S/W 문제해결 기본] 3일차 - 최적 경로 [C++] (0) | 2024.04.03 |
SW Expert Academy [S/W 문제해결 기본] 1일차 - View [C++] (0) | 2024.03.17 |