백준

백준 1918 - Java

으엉어엉 2024. 9. 21. 12:59
728x90

 

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

//Infix To Postfix
public class PostOrder1 {
    public static void main(String[] args) throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringBuilder sb = new StringBuilder();
        Stack<Character> stack = new Stack<>();

        String s = br.readLine();
        for (int i = 0; i < s.length(); i++) {
            char c = s.charAt(i);

            //(A-Z)는 그대로 출력
            if (Character.isLetter(c)) {
                sb.append(c);
            }
            //괄호는 스택에
            else if (c == '(') {
                stack.push(c);
            }
            //괄호 스택에서 꺼내 출력
            else if (c == ')') {
                while (!stack.isEmpty() && stack.peek() != '(') {
                    sb.append(stack.pop());
                }
                stack.pop();
            }
            //연산자 처리
            else {
                while (!stack.isEmpty() && precedence(stack.peek()) >= precedence(c)) {
                    sb.append(stack.pop());
                }
                stack.push(c);
            }
        }

        //남아 있는 연산자 모두 출력
        while (!stack.isEmpty()) {
            sb.append(stack.pop());
        }
        System.out.println(sb.toString());
    }

    // 연산자의 우선순위 반환
    private static int precedence(char operator) {
        if (operator == '+' || operator == '-') {
            return 1;
        } else if (operator == '*' || operator == '/') {
            return 2;
        }
        return 0;  // 괄호 등은 우선순위 0으로 처리
    }
}
728x90

'백준' 카테고리의 다른 글

백준 10809 - Java  (0) 2024.09.21
백준 10808 - Java  (0) 2024.09.21
백준 1935 - Java  (0) 2024.09.19
백준 17299 - Java  (0) 2024.09.19
백준 17298 - Java  (1) 2024.09.17