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

}