on
[BOJ_1918/JAVA] 후위 표기식
[BOJ_1918/JAVA] 후위 표기식
https://www.acmicpc.net/problem/1918
문제
풀이
해당 문제는 스택으로 푼다.
1. 연산자를 만났을 경우
2. 피연산자를 만났을 경우
3. 괄호를 만났을 경우
로 크게 나눈다.
연산자를 만났을 경우 연산자들 간의 우선순위를 정하여 스택에 들어오려는 연산자가 더 클 경우 push하고 peek한 연산자가 더 클 경우 pop을 해준다.
피연산자를 만났을 경우 StringBuilderd에 바로 추가해준다.
괄호를 만났을 경우 '('면 push해주고 ')'면 '('나올때까지 pop을 해준다.
코드
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.Stack; public class BOJ1918 { public static void main(String[] args) throws IOException { // TODO Auto-generated method stub BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); StringBuilder sb = new StringBuilder(); Stack stack = new Stack<>(); String input = br.readLine(); for(int i=0;i= prior(c)) { sb.append(stack.pop()); } stack.push(c); break; case '(' : stack.push(c); break; case ')' : while(!stack.isEmpty() && stack.peek()!='(') { sb.append(stack.pop()); } stack.pop(); break; default : // 피연산자일때 sb.append(c); } } while(!stack.isEmpty()) { sb.append(stack.pop()); } System.out.println(sb); } public static int prior(char c) { if(c=='(' || c==')') { return 0; }else if(c=='+'||c=='-') { return 1; }else if(c=='*'||c=='/'){ return 2; } return -1; } }
from http://silvergal.tistory.com/88 by ccl(A) rewrite - 2021-12-27 18:01:42