알고리즘/백준

백준 15815 천재 수학자 성필

등반 2021. 12. 24. 00:00

 

https://www.acmicpc.net/problem/15815

 

15815번: 천재 수학자 성필

길이가 100이 넘지 않는 수식이 예제 입력과 같이 공백 없이 입력된다. 수식은 0부터 9까지의 숫자와 연산자 '+', '-', '*', '/' 로만 이루어져 있다. 또한, 수식의 계산 중간 과정의 모든 결과는 항상 2

www.acmicpc.net

후위 표기 방식의 수식을 계산하는 문제다.

연산자 +, -, *, / 모두 이항연산자(피연산자 2개 사용)이므로,

1. 수식을 차례로 스택에 넣으면서

2. 연산자를 만나는 경우, 스택에서 피연산자 2개를 꺼내 계산한 후, 결과를 스택에 넣어준다.

 

#include <iostream>
#define fio cin.tie(0)->sync_with_stdio(0)
using namespace std;

#include <stack>
int main(){
    fio;
    string S; cin >> S;
    stack<int> nums;
    for(auto c : S){
        if(isdigit(c)){
            nums.push(c-'0');
        }else{
            int first = nums.top(); nums.pop();
            int second = nums.top(); nums.pop();
            if(c == '+')    nums.push(second+first);
            if(c == '-')    nums.push(second-first);
            if(c == '*')    nums.push(second*first);
            if(c == '/')    nums.push(second/first);
        }
    }

    cout << nums.top();
    return 0;
}