Algorithm/개념 정리

[알고리즘] 후위표기법

반응형

[알고리즘] 후위표기법



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
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
import java.util.ArrayList;
import java.util.Scanner;
import java.util.Stack;
 
public class 후위표기법 {
    
    public static int priority(char ch) {
        switch (ch) {
        case '*':
        case '/':
            return 2;
        case '+':
        case '-':
            return 1;
        case '(':
        case ')':
            return 0;
        }
        return -1;
    }
 
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        
        char[] s= sc.nextLine().toCharArray();
        int len = s.length;
        
        /*
        for (int i = 0; i < s.length; i++) {
            System.out.print(s[i] + " ");
        }
        */
        
        Stack<Character> stack = new Stack<Character>();
        ArrayList<Character> arr = new ArrayList<Character>();
        
        for (int i = 0; i < len; i++) {
            int p = priority(s[i]);
            char ch = s[i];
            
            switch (ch) {
            case '+':
            case '-':
            case '*':
            case '/':
                while(!stack.isEmpty() && priority(stack.peek()) >= p) {
                    arr.add(stack.pop());
                }
                stack.push(ch);
                break;
            case '(':
                stack.push(ch);
                break;
            case ')':
                while(!stack.isEmpty() && stack.peek() != '(') {
                    arr.add(stack.pop());
                }
                stack.pop();
                break;
            default:
                arr.add(ch);    
            }
            
        }
        
        while(!stack.isEmpty()) {
            arr.add(stack.pop());
        }
        
        for (int i = 0; i < arr.size(); i++) {
            System.out.print(arr.get(i));
        }
        System.out.println();
        System.out.println(arr.toString());
    }
 
}
cs


반응형

'Algorithm > 개념 정리' 카테고리의 다른 글

[알고리즘] Queue  (0) 2019.01.29
[알고리즘] 순열 & 조합  (0) 2019.01.26
[C++] 배열 사이즈 구하기  (0) 2018.11.12
[알고리즘] 이분 탐색(Binary Search)  (0) 2018.06.09
[알고리즘] 그리디 알고리즘  (0) 2018.06.01