Algorithm & Data Structures/BOJ
1918. 후위 표기식 (Java)
Geisha
2024. 1. 1. 23:26
스택과
priority 함수를 통해
연산자의 우선순위를 판단하고 출력한다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Stack;
public class Main {
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> st = new Stack<>();
for(int i = 0 ; i < str.length(); i++){
char now = str.charAt(i);
switch (now){
case '+' :
case '-' :
case '*' :
case '/' :
while(!st.isEmpty() && priority(st.peek()) >= priority(now)){
sb.append(st.pop());
}
st.add(now);
break;
case '(':
st.add(now);
break;
case ')':
while(!st.isEmpty() && st.peek() != '('){
sb.append(st.pop());
}
st.pop();
break;
default:
sb.append(now);
}
}
while(!st.isEmpty()){
sb.append(st.pop());
}
System.out.println(sb.toString());
}
public static int priority(char operator){
if(operator=='(' || operator==')'){
return 0;
} else if (operator == '+' || operator == '-') {
return 1;
} else if (operator == '*' || operator == '/') {
return 2;
}
return -1;
}
}