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;
}
}