-
백준 1918번 후위 표기식 문제 스택 활용 풀이 ( Java )Problem Solving/Java 2019. 10. 21. 17:49반응형
1918번: 후위 표기식
첫째 줄에 중위 표기식이 주어진다. 단 이 수식의 피연산자는 A~Z의 문자로 이루어지며 수식에서 한 번씩만 등장한다. 그리고 -A+B와 같이 -가 가장 앞에 오거나 AB와 같이 *가 생략되는 등의 수식은 주어지지 않는다. 표기식은 알파벳 대문자와 +, -, *, /, (, )로만 이루어져 있으며, 길이는 100을 넘지 않는다.
www.acmicpc.net
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071public class Main {public static int comparison(char ch) {if (ch == '(') return 0;if (ch == '+' || ch == '-') return 1;else return 2;}public static void main(String[] args) throws IOException {BufferedReader br = new BufferedReader(new InputStreamReader(System.in));BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));String input = br.readLine();Stack<Character> stack = new Stack<Character>();// 문자는 그냥 찍고// 기호는 우선순위에 따라 스택에 넣거나 출력for (int i = 0; i < input.length(); i++) {if (input.charAt(i) >= 'A' && input.charAt(i) <= 'Z') {// 문자일 경우bw.write(input.charAt(i));// 그냥 출력} else if (input.charAt(i) == '('){// 여는 괄호일 경우stack.push(input.charAt(i));// 스택에 추가} else if (input.charAt(i) == ')') {// 닫는 괄호일 경우while(!stack.isEmpty()) {// 스택이 빌 때 까지// 여는 괄호를 만나면// 여는 괄홀 없애고break;// 반복 종료}// 스택 상단 값을 출력하는데}}else{// * / + - 일 경우// 스택이 비어 있지 않고 스택 상단 값의 우선순위가 입력 문자보다 크면// 괄호안이 아니고 stack 최상단 값이 * 나 /면// 스택 상단 값 출력}stack.add(input.charAt(i));// 다시 담는다}}while (!stack.isEmpty()) {// 반복 끝났는데 스택이 다 비어있지 않으면// 스택 상단 값 출력}}}Java의 문법에 생각을 맞추는 거 보다
처음 상상한 방법을 구현하기 위해 Java를 활용하는 게 더 깔끔한 코드를 짤 수 있는 방법 같다
반응형'Problem Solving > Java' 카테고리의 다른 글
백준 10809번 알파벳 찾기 문제 풀이 ( Java ) (0) 2019.10.21 백준 10808번 알파벳 개수 문제 풀이 ( Java ) (0) 2019.10.21 백준 17299번 오등큰수 문제 스택 활용 풀이 ( Java ) (0) 2019.10.21 백준 17298번 오큰수 문제 스택 활용 풀이 ( Java ) (2) 2019.10.20 백준 10799 쇠막대기 문제 풀이 Stack 활용 ( Java ) (0) 2019.10.20