카테고리 없음

[1918] 백준 : 후위표기식(C++)

데롱디롱 2020. 5. 1. 15:14
728x90

* 생각하지 못한 점
- 연산자 우선순위 : ( → *, / → +, - → )

 

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

int main() {
	string s;
	cin >> s;

	stack<char>st;
	string answer = "";

	for (int i = 0; i < s.size(); i++)
	{
		if ('A' <= s[i] && s[i] <= 'Z')
			answer += s[i];
		else
		{
			switch (s[i])
			{
			case '(':
				st.push(s[i]);
				break;
			case '*':
			case '/':
				while (!st.empty() && (st.top() == '*' || st.top() == '/'))
				{
					answer += st.top();
					st.pop();
				}
				st.push(s[i]);
				break;
			case '+':
			case '-':
				while (!st.empty() && st.top() != '(')
				{
					answer += st.top();
					st.pop();
				}
				st.push(s[i]);
				break;
			case ')':
				while (!st.empty() && st.top() != '(')
				{
					answer += st.top();
					st.pop();
				}
				st.pop();
				break;
			default:
				break;
			}
		}
	}
	while (!st.empty())
	{
		answer += st.top();
		st.pop();
	}
	cout << answer;

	return 0;
}

 

- 자꾸 break;를 안 해서 틀렸었다... 습관좀 들이자 ㅜㅜ