Dev.baelanche

[백준 1918] 후위표기식 본문

Data Structure & Algorithm/PS - JAVA

[백준 1918] 후위표기식

baelanche 2019. 5. 3. 20:14
반응형

 

 

다음과 같은 규칙을 따라 스택으로 구현해야 한다.

1. A, B, C .... 등의 피연산자는 곧바로 출력한다.

2. +, - 연산자는 <스택이 비어있을때, 스택의 탑이 '(' 일때> push 한다.

 - 그렇지 않을때는 위 조건이 참이 될때까지 스택을 pop 하며 출력한다.

3. *, / 연산자는 <스택이 비어있을때, 스택의 탑이 '(', '-' ,'+' 일때> push 한다.

 - 그렇지 않을때는 위 조건이 참이 될때까지 스택을 pop 하며 출력한다.

4. ( 기호는 push 한다.

5. ) 기호는 스택의 탑이 '(' 이 될때까지 스택을 pop 하며 출력한다.

 - '(' 기호는 pop 하지만 출력하지는 않는다.

6. 위 절차가 끝나고 스택에 값이 남아있다면 모두 pop 하며 출력한다.

 

 

public class Main {
    
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        Stack s = new Stack();
        char[] c = sc.next().toCharArray();
        
        for(int i=0; i<c.length; i++) {
            if(c[i] == '+' || c[i] == '-') {
                while(true) {
                    if(s.isEmpty() || s.peek() == (Object)'(') {
                        s.push(c[i]);
                        break;
                    } else System.out.print(s.pop());
                }
            } else if(c[i] == '*' || c[i] == '/') {
                while(true) {
                    if(s.isEmpty() || s.peek() == (Object)'(' || s.peek() == (Object)'+' || s.peek() == (Object)'-') {
                        s.push(c[i]);
                        break;
                    } else System.out.print(s.pop());
                }
            } else if(c[i] == '(') {
                s.push(c[i]);
            } else if(c[i] == ')') {
                while(!s.isEmpty()) {
                    if(s.peek() != (Object)'(') {
                        System.out.print(s.peek());
                    } else { s.pop(); break; }
                    s.pop();
                }
            } else System.out.print(c[i]);
        }
        while(!s.isEmpty()) System.out.print(s.pop());
    }
}
반응형

'Data Structure & Algorithm > PS - JAVA' 카테고리의 다른 글

[백준 11000] 강의실 배정  (0) 2019.05.07
[백준 1931] 회의실배정  (0) 2019.05.07
[백준 1992] 쿼드트리  (0) 2019.05.03
[백준 1780] 종이의 개수  (0) 2019.05.03
[백준 1629] 곱셈  (0) 2019.05.03
Comments