๊น์ ์
ํ์ธ๋ํ๊ต 22ํ๋ฒ ์ปดํจํฐ๊ณตํ๊ณผ
ํ์ธ๋ํ๊ต 22ํ๋ฒ ์ปดํจํฐ๊ณตํ๊ณผ
์ค์ ํ๊ธฐ์์ด ์ฃผ์ด์ก์ ๋ ํ์ ํ๊ธฐ์์ผ๋ก ๊ณ ์น๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค
๋งํฌ: https://www.acmicpc.net/problem/1918
์ค์ ํ๊ธฐ์์ ํ์ ํ๊ธฐ์์ผ๋ก ๋ฐ๊พธ๋ ์๊ณ ๋ฆฌ์ฆ์ ์์ฑ์์ผฐ๋ค. ์คํ๊ณผ switch case๋ฌธ์ ํ์ฉํ์ต๋๋ค.
#include <iostream>
#include <stack>
#include <string>
using namespace std;
// &๋ถ์ฌ์ ์ฃผ์๊ฐ์ ๋ฐ๋ก ์ ๊ทผ
void endFormula(string& _result, stack<char>& _operator)
{
while(!_operator.empty() && _operator.top() != '(')
{
_result += _operator.top();
_operator.pop();
}
if(!_operator.empty() && _operator.top() == '(')
_operator.pop();
return;
}
void printOperate(string& _result, stack<char>& _operator)
{
while(!_operator.empty())
{
if(_operator.top() != '(' && _operator.top() != ')')
_result += _operator.top();
_operator.pop();
}
}
int precedence(char op) {
if (op == '+' || op == '-') return 1;
if (op == '*' || op == '/') return 2;
return 0;
}
int main()
{
string formula, result;
stack<char> s_operator;
cin >> formula;
//size_t๋ ์ธ๋ฑ์ค์ฉ์ผ๋ก ๋ง์ด์ฐ์. ๋ฉ๋ชจ๋ฆฌ ํฌ๊ธฐ๊ฐ ์๋ค.
for(size_t i = 0; i < formula.length(); ++i)
{
char c = formula[i];
switch(c)
{
case '(':
s_operator.push(c);
break;
case ')':
endFormula(result, s_operator);
break;
case '+': case '-': case '*': case '/':
while(!s_operator.empty() && s_operator.top() != '('
&& precedence(s_operator.top()) >= precedence(c))
{
result += s_operator.top();
s_operator.pop();
}
s_operator.push(c);
break;
default:
result += c;
break;
}
}
printOperate(result, s_operator);
cout << result << endl;
return 0;
}
๋ฐ๋ณต๋ฌธ์ผ๋ก ๋ฌธ์์ด์ 1๋ฒ๋ง ์ํํ๋ค. switch case๋ฌธ์ผ๋ก ์ ์ํ ๋๋ ์ฐ์ฐ์ ์ฐ์ ์์๋๋ก ๋์๋ค.
์ฒ์์๋ ๊ดํธ๋ฅผ ์ด๋ป๊ฒ ์ฒ๋ฆฌํ๋ ๊ณ ๋ฏผํ๋๋ฐ ์ผ๋จ, ๋ฌธ์์ ์ฐ์ฐ์๋ค์ ๋ถ๋ฆฌ์์ผ๋๊ณ ํ๋์ฉ ์คํ์์ ๋นผ๋ด๋๋ฐ ๋ซํ ์ค๊ดํธ๋ฅผ ๋ง๋๋ฉด ๋ชจ๋ ์ฐ์ฐ์๋ฅผ ๋ฐํํ๊ณ (๋จ, ์ด๋ฆฐ ์ค๊ดํธ๋ฅผ ๋ง๋๊ธฐ ์ ๊น์ง!) ์ฐ์ ์์๋ฅผ ๊ตฌํ๋ ๋ฐฉ์์ ๊ณ ๋ฏผ๊ณ ๋ฏผํ๋ค๊ฐ ๊ฒ์ํ๋ค. precedence ํจ์๋ฅผ ๋ง๋ค์ด์ + - * / ์ผ์ด์ค ๋ด๋ถ์์ ๋น๊ตํ๋ค. ๊ดํธ์ฐ์ฐ์๊ฐ ๋น๊ต๋์์ ์๊ณ , ์คํ์ด ๋น์ด์์ง ์๊ณ , ํ์ฌ ์ฐ์ฐ์๊ฐ ์ด์ ์ฐ์ฐ์๋ณด๋ค ์ฐ์ ์์๊ฐ ๋ ํฌ๋ฉด result๋ก ๋ฐ๋ก ๋ฃ๋๋ค. ์ด ์กฐ๊ฑด์ ์ถฉ์กฑํ์ง ์์ผ๋ฉด ์คํ์ ๋ด๋๋ค. ์ฐ์ ์์๊ฐ ๋ง์ง๋ง์ printOperate๋ก ๊ดํธ๋ฅผ ๋ฐฐ์ ์ํค๊ณ result์ ๋ด์์ ์ถ๋ ฅํ๋ค.