728x90
반응형
[알고리즘] 후위표기법
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 |
728x90
반응형
'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 |