쌓고 쌓다

[백준] 후위 표기식 1918번 C++ 풀이 본문

알고리즘/백준

[백준] 후위 표기식 1918번 C++ 풀이

승민아 2022. 3. 29. 18:45

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

 

1918번: 후위 표기식

첫째 줄에 중위 표기식이 주어진다. 단 이 수식의 피연산자는 알파벳 대문자로 이루어지며 수식에서 한 번씩만 등장한다. 그리고 -A+B와 같이 -가 가장 앞에 오거나 AB와 같이 *가 생략되는 등의

www.acmicpc.net

 

후위 표기식으로 바꾸는 방법은 저번에 작성했었다. 저것을 참고...

설명 -> https://non-stop.tistory.com/91

 

전체 코드

#include <iostream>
#include <stack>
using namespace std;
string str;

int prec(char ch)
{
	switch (ch) {
	case '+': case '-':
		return 1;
	case '*': case '/':
		return 2;
	case '(':
		return 0;
	}
}

void solve()
{
	stack<char> s;

	int idx = 0;
	while (idx < str.length())
	{
		char ch = str[idx];

		if (ch >= 'A' && ch <= 'Z')
			cout << ch;
		else if (ch == '(')
			s.push('(');
		else if (ch == ')')
		{
			while (s.top() != '(')
			{
				cout << s.top();
				s.pop();
			}
			s.pop();
		}
		else
		{
			while (!s.empty() && prec(ch) <= prec(s.top()) )
			{
				cout << s.top();
				s.pop();
			}
			s.push(ch);
		}
		idx++;
	}

	while (!s.empty())
	{
		cout << s.top();
		s.pop();
	}
}
int main(void)
{
	cin >> str;
	solve();
}
Comments