Notice
Recent Posts
Recent Comments
Link
Dev.baelanche
[백준 1918] 후위표기식 본문
반응형
다음과 같은 규칙을 따라 스택으로 구현해야 한다.
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