[BOJ] 백준 1935 후위표기식2
문제 링크 : https://www.acmicpc.net/problem/1935
후위표기식 문제에서 스택을 사용하여 중위표기식을 후위표기식으로 변환 하였습니다.
이렇게 변환하는 이유는 컴퓨터가 계산을 처리할때 피연산자 2개와 연산자 1개를 결합하는 식으로 계산하기 쉽게 하기 위해서 입니다.
같은방식으로 변환한 후위표기식을 계산해 봅시다.
피연산자를 순서대로 스택에 넣다가, 연산자를 만나면 피연산자 두개를 pop 하여 연산자와 계산한 후 결과를 다시 스택에 넣어주면 되겠습니다.
소스 코드 :
#include#include #include #include using namespace std; int main() { int t; cin >> t; cin.ignore(); string s; getline(cin, s); vector v(t); for (int i = 0; i < t; i++) { cin >> v[i]; cin.ignore(); } stack ap; double res = 0.0; for (int i = 0; i < s.length(); i++) { // 지정된 문자(피연산자)의 값을 벡터에 push. if (isalpha(s[i])) ap.push(v[s[i] - 65]); // 연산자라면 2개 팝 후 계산. else { if (ap.size() >= 2) { double a = ap.top(); ap.pop(); double b = ap.top(); char op = s[i]; if (op == '+') { res = a + b; } else if (op == '-') { res = b - a; } else if (op == '*') { res = a * b; } else if (op == '/') { res = (double)(b / a); } ap.pop(); // 결과를 다시 push. ap.push(res); } } } // 소숫점 2자리까지 표시. cout.precision(2); cout << fixed << res << endl; }
댓글
댓글 쓰기