문제
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;
}