본문 바로가기
코딩 문제 풀이/백준

[백준] 자바 문제 풀이 1918 : 골드2

by 코딩하는 랄로 2023. 9. 20.
728x90
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
import java.util.Stack;

public class Main {
	public static boolean is_Op(char c) {
		if (c == '*' || c == '/' || c == '+' || c == '-' || c == '(' || c == ')')
			return true;
		return false;
	}

	public static int compareOp(char a, char b) {
		switch (a) {
		case '-':
		case '+':
			if (b == '-' || b == '+')
				return 0;
			return 1;
		case '*':
		case '/':
			if (b == '(' || b == ')')
				return 1;
			return 0;
		}
		return 1;
	}

	public static void main(String[] args) throws Exception {
		// TODO Auto-generated method stub
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		String str = br.readLine();
		char[] s = new char[str.length()];

		for (int i = 0; i < s.length; i++) {
			s[i] = str.charAt(i);
		}

		List<Character> formula = new ArrayList<>();
		Stack<Character> op_stack = new Stack<>();

		for (int i = 0; i < s.length; i++) {
			if (is_Op(s[i])) {
				if (op_stack.isEmpty())
					op_stack.add(s[i]);
				else if (s[i] == ')') {
					while (!op_stack.isEmpty() && op_stack.peek() != '(')
						formula.add(op_stack.pop());
					op_stack.pop();
				} else if (compareOp(op_stack.peek(), s[i]) == 0) {
					while (!op_stack.isEmpty() && op_stack.peek() != '(' && compareOp(op_stack.peek(), s[i]) == 0)
						formula.add(op_stack.pop());
					op_stack.add(s[i]);
				} else if (compareOp(op_stack.peek(), s[i]) == 1) {
					op_stack.add(s[i]);
				}
			} else {
				formula.add(s[i]);
			}
		}

		while (!op_stack.isEmpty())
			formula.add(op_stack.pop());

		for (char a : formula)
			if (a != '(' && a != ')')
				System.out.print(a);
	}

}
728x90