π Notation(ννμ)
π Notation(ννμ)
- μ°μ°μμ νΌμ°μ°μλ₯Ό μ‘°ν©νμ¬ κ°μ μμ±νλ μ
π μ€μ νκΈ°λ²(Infix Notation)
- μ°λ¦¬κ° μΌλ°μ μΌλ‘ μ¬μ©νλ μ°μ°μ νν
- A + B κ°μ ννλ‘ μ°μ°μκ° νΌμ°μ°μ μ¬μ΄μ μμΉ
- μ°μ μμμ κ΄νΈλ₯Ό κ³ λ €
β μμ
3 + 5
(2 * 3) + 4
a + b * c
β νΉμ§
- κ°λ μ±μ΄ λμ(μ¬λνν λ§)
- μ°μ°μ μ°μ μμλ₯Ό κ³ λ €ν΄μΌν¨
- κ΄νΈλ₯Ό μ΄μ©ν΄ μ°μ° μμλ₯Ό λͺ νν ννν΄μΌ ν¨
π μ μ νκΈ°λ²(Prefix Notation)
- μ°μ°μκ° νΌμ°μ°μ μμ μμΉ
- κ΄νΈκ° νμνμ§ μμ
β μμ
+ 3 5 (β 3 + 5)
* + 2 3 4 (β (2 + 3) * 4)
β νΉμ§
- μ°μ°μμ μμΉκ° κ³ μ λμ΄ μμ΄μ μ°μ°μ μ°μ μμλ₯Ό κ³ λ €ν νμμμ
- κ΄νΈκ° νμμμ
- μ»΄ν¨ν°κ° μ°μ°νκΈ°μ μ ν©ν ꡬ쑰
π νμ νκΈ°λ²(Postfix Notation)
- μ°μ°μκ° νΌμ°μ°μ λ€μ μμΉ
- μ€ν μ μ΄μ©νλ©΄ μ½κ² κ³μ° κ°λ₯
β μμ
3 5 + (β 3 + 5)
2 3 + 4 * (β (2 + 3) * 4)
β νΉμ§
- μ°μ°μ μ°μ μμλ₯Ό κ³ λ €ν νμκ° μμ
- κ΄νΈ μμ΄λ μ°μ° μμκ° λͺ νν¨
- μ€νμ μ΄μ©ν΄ μ½κ² κ³μ° κ°λ₯
π μ€μ β νμ λ³ν (Shunting-yard μκ³ λ¦¬μ¦)
β λ³ν κ·μΉ
- μ«μλ κ·Έλλ‘ μΆλ ₯
- μ°μ°μλ μ€νμ μ μ₯ (μ°μ μμ κ³ λ €)
- (λ μ€νμ push, )λ₯Ό λ§λλ©΄ (κ° λμ¬ λκΉμ§ pop ν μΆλ ₯
- λͺ¨λ μ°μ°μ pop ν μΆλ ₯
#include <iostream>
#include <stack>
#include <cctype>
using namespace std;
int precedence(char op) {
if (op == '+' || op == '-') return 1;
if (op == '*' || op == '/') return 2;
return 0;
}
string infixToPostfix(string infix) {
stack<char> stk;
string postfix = "";
for (char ch : infix) {
if (isdigit(ch)) {
postfix += ch;
postfix += ' ';
}
else if (ch == '(') stk.push(ch);
else if (ch == ')') {
while (!stk.empty() && stk.top() != '(') {
postfix += stk.top();
postfix += ' ';
stk.pop();
}
stk.pop(); // '(' μ κ±°
}
else { // μ°μ°μ
while (!stk.empty() && precedence(stk.top()) >= precedence(ch)) {
postfix += stk.top();
postfix += ' ';
stk.pop();
}
stk.push(ch);
}
}
while (!stk.empty()) {
postfix += stk.top();
postfix += ' ';
stk.pop();
}
return postfix;
}
int main() {
string infix = "(2+3)*4";
cout << infixToPostfix(infix); // μΆλ ₯: 2 3 + 4 *
}