개발자 미니민의 개발스터디

[백준 JAVA] 1918번 풀이 - 후위 표기식

by mini_min

package quiz;

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

/**
 * 후위 표기식
 * 1. 연산자 우선순위로 괄호로 묶는다.
 * 2. 괄호 안의 연산자를 괄호의 오른쪽으로 옮긴다.
 * 중위 표기식을 후위 표기식으로 고치는 프로그램을 작성하시오.
 *
 */
public class _1918 {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String s = br.readLine(); //A+B*C  ---->   ABC*+
        
        Stack<Character> op = new Stack<>();
        StringBuilder sb = new StringBuilder();
        for(int i=0; i<s.length(); i++){
            char c = s.charAt(i);

            if(c>='A' && c<='Z'){ //피연산자는 그대로 출력
                sb.append(c);
            } else if(c=='(') {
                op.push(c);
            } else if(c==')') {
                while(!op.isEmpty()){
                    if(op.peek()=='('){ //(가 나올 때 까지 pop
                        op.pop();
                        break;
                    }
                    sb.append(op.pop());
                }
            } else {
                while(!op.isEmpty() && priority(op.peek()) >= priority(c)){
                    sb.append(op.pop());
                }
                op.push(c);
            }
        }

        while(!op.isEmpty()){
            sb.append(op.pop());
        }

        System.out.println(sb);

    }
    public static int priority(char t){
        if(t =='*' || t =='/') return 2;
        else if (t == '(') return 0;
        else return 1;
    }

}

 

풀이

후위 표기식 개념 포스팅 참고하기 

https://backshren20.tistory.com/666

 

[자료구조-스택] 후위 표기법이란? (백준 1935번)

💡 👍🏻 후위식은 연산자를 피연산자 뒤에 놓고 표기하는 방법이다. 3 10 * → (피연산자) (피연산자) (연산자) 중위 표기법이란? 숫자와 숫자 사이에 연산자를 넣어서 식을 표현하는 것이다. 피

backshren20.tistory.com

 

 

 

블로그의 정보

개발자 미니민의 개발로그

mini_min

활동하기