후위 표현식

중위 표현식을 후위 표현식으로 변경하라.

1
ex) 5 + (4 - 2) - 3 * 2 === 5 4 2 - + 3 2 * -

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
import java.util.*;
public class Postfix{
public static void main(String[] args){
String expression = "5+(4-2)-3*2";
Stack stack = new Stack();
StringBuilder sb = new StringBuilder();
for(int i = 0; i < expression.length(); i++){
char c = expression.charAt(i);
switch(c){
case '0':
case '1':
case '2':
case '3':
case '4':
case '5':
case '6':
case '7':
case '8':
case '9':
sb.append(c);
break;
case '+':
case '-':
case '*':
case '/':
if(!stack.empty() && (stack.peek() != '(')){
if(order(stack.peek()) <= order(c)){
sb.append(stack.pop());
}
}
stack.push(c);
break;
case '(':
stack.push(c);
break;
case ')':
char op;
while((op = stack.pop()) != '('){
sb.append(op);
}
break;
default:
System.out.println("Error");
return;
}
}
while(!stack.empty()){
sb.append(stack.pop());
}
System.out.println(sb.toString());
}
public static int order(char op){
switch(op){
case '*': case '/': return 1;
case '+': case '-': return 2;
default: return 0; }
}
}
}
Share Comments