쌓고 쌓다

후위 표기식 계산 - 스택 활용 본문

알고리즘/개념

후위 표기식 계산 - 스택 활용

승민아 2022. 3. 28. 20:49

문자열을 탐색하는데

피연산자(숫자)라면 스택에 그냥 저장해줍니다.

연산자라면 피연산자가 2개 필요하겠죠?

스택에서 피연산자 2개를 꺼냅니다.

먼저 꺼낸 것은 op2 ( 연산자 뒤에 쓸 피연산자)

2번째로 꺼낸것은 op1 ( 연산자 앞에 쓸 피연산자)입니다.

op1, op2를 연산자로 계산하여 스택에 넣어줍니다.

연산자가 / 라면

op1/op2를 스택에 넣어줍니다.

이 과정을 문자열 끝까지 실행 시

스택에는 결괏값만 남아 있을 것입니다.

 

전체 코드

#include <iostream>
#include <stack>
using namespace std;
int solve(string str)
{
	stack<int> s;
	int idx = 0;
	while (idx < str.length())
	{
		char ch = str[idx];

		if (ch != '+' && ch != '-' && ch != '/' && ch != '*') //피연산자(숫자)인 경우
		{
			int value = ch - '0';
			s.push(value);
		}
		else // 연산자인 경우
		{
			int op2 = s.top();
			s.pop();
			int op1 = s.top();
			s.pop();

			switch (ch) {

			case '+': s.push(op1 + op2); break;
			case '-': s.push(op1 - op2); break;
			case '*': s.push(op1 * op2); break;
			case '/': s.push(op1 / op2); break;

			}
		}
	
		idx++;
	}
	return s.top(); // 다 돌면 스택에는 결괏값만 있다~
}
int main(void)
{
	cout<<solve("82/3-"); // 결과:1
}

 

Comments