Notice
Recent Posts
Recent Comments
Link
«   2024/05   »
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
Tags
more
Archives
Today
Total
관리 메뉴

코드와이

[BAEKJOON] 1918. 후위 표기식 본문

acmicpc

[BAEKJOON] 1918. 후위 표기식

코드와이 2021. 10. 24. 18:36

 

문제링크

https://www.acmicpc.net/problem/1918

 

1918번: 후위 표기식

첫째 줄에 중위 표기식이 주어진다. 단 이 수식의 피연산자는 A~Z의 문자로 이루어지며 수식에서 한 번씩만 등장한다. 그리고 -A+B와 같이 -가 가장 앞에 오거나 AB와 같이 *가 생략되는 등의 수식

www.acmicpc.net

 

package acmicpc.Gold3;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Stack;


public class 후위_표기식 {

	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringBuilder sb = new StringBuilder();
		
		String str = br.readLine();
		
		Stack<Character> stack = new Stack<>();
		for(char c : str.toCharArray()) {
			if(c >= 'A' && c <= 'Z') {
				sb.append(c);
			} else if(c == '(') {
				stack.add(c);
			} else if(c == ')') {
				
				while(!stack.isEmpty()) {
					char tmp = stack.pop();
					if(tmp == '(') break;
					sb.append(tmp);
				}
			
			} else {
				
				while(!stack.isEmpty() && checkPrior(c) <= checkPrior(stack.peek())) {
					sb.append(stack.pop());
				}
				stack.add(c);
			}
		}
		
		while(!stack.isEmpty()) {
			sb.append(stack.pop());
		}
		
		System.out.println(sb);
		
	}
	
	public static int checkPrior(char c) {
		if(c == '*' || c == '/') return 2;
		else if(c == '+' || c == '-') return 1;
		else return 0;
	}
}

'acmicpc' 카테고리의 다른 글

[BAEKJOON] 1300. K번째 수  (0) 2021.11.06
[BAEKJOON] 2263. 트리의 순회  (0) 2021.11.06
[BAEKJOON] 1167. 트리의 지름  (0) 2021.10.18
[BAEKJOON] 2665. 미로 만들기  (0) 2021.10.16
[BAEKJOON] 17406. 배열 돌리기4  (0) 2021.10.16