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

    2020. 5. 1.

    by. 데롱디롱

    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;를 안 해서 틀렸었다... 습관좀 들이자 ㅜㅜ

    댓글