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;
}
'알고리즘 > 백준' 카테고리의 다른 글
백준 12789 도키도키 간식드리미 (0) | 2021.12.24 |
---|---|
백준 18100 Думский регламент (0) | 2021.12.24 |
백준 11899 괄호 끼워넣기 (0) | 2021.12.23 |
백준 3986 좋은 단어 (0) | 2021.12.23 |
백준 18511 큰 수 구성하기 (0) | 2021.12.22 |