관리 메뉴

풀이 보관함

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

problem solving/백준

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

viin 2022. 6. 30. 10:35

문제

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

 

풀이

 

스택을 이용해 푸는 문제라는걸 알고 있어서 쉽게 풀었다. 

각 연산자마다 어떤 행동을 해야 하는지 조건문을 잘 걸어줘야 한다 .

연산자의 우선순위는  아래와 같다. 

1. *,/

2. +,-

3. ), ( 

 

소스

#include <iostream>
#include <stack>
#include <string>

int main() 
{
    //input
    std::string input; std::cin >> input;

    //solve
    std::stack <char> op;
    std::string result;

	for (int i = 0; i < input.size(); ++i)
    {
        //문자열
		if (input[i] >= 'A' && input[i] <= 'Z')
			result += input[i];
		else 
        {
                // 연산자 
				if (input[i] == '(')
					op.push(input[i]);

				else if (input[i] == ')') {
					while (1) 
                    {
						char temp = op.top();
						op.pop();
                        
						if (temp == '(')
							break;
						result += temp;
					}
				}
				else if (input[i] == '+' || input[i] == '-') {
					while (!op.empty() && op.top() != '(')
                    {
						result += op.top();
						op.pop();
					}
					op.push(input[i]);
								
				}
				else if (input[i] == '*' || input[i] == '/') {
					while (!op.empty() && (op.top() == '*' || op.top() == '/'))
                    {
						result += op.top();
						op.pop();
					}
					op.push(input[i]);
					
				}


		}

	}

	while (!op.empty())
    {
		result += op.top();
		op.pop();
	}
    
    //output
	std::cout << result;
	return 0;
}