250405 후위 표기식

Jongleee·2025년 4월 5일
0

TIL

목록 보기
859/970
public static void main(String[] args) throws IOException {
	BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
	String expression = br.readLine();
	System.out.println(convertToPostfix(expression));
}

private static String convertToPostfix(String expression) {
	StringBuilder result = new StringBuilder();
	Stack<Character> operatorStack = new Stack<>();

	for (char ch : expression.toCharArray()) {
		if (Character.isUpperCase(ch)) {
			result.append(ch);
		} else if (ch == '(') {
			operatorStack.push(ch);
		} else if (ch == ')') {
			while (!operatorStack.isEmpty()) {
				char top = operatorStack.pop();
				if (top == '(')
					break;
				result.append(top);
			}
		} else {
			handleOperatorPrecedence(result, operatorStack, ch);
			operatorStack.push(ch);
		}
	}

	while (!operatorStack.isEmpty()) {
		result.append(operatorStack.pop());
	}

	return result.toString();
}

private static void handleOperatorPrecedence(StringBuilder result, Stack<Character> operatorStack, char ch) {
	while (!operatorStack.isEmpty() &&
			getPriority(operatorStack.peek()) >= getPriority(ch)) {
		result.append(operatorStack.pop());
	}
}

private static int getPriority(char operator) {
	if (operator == '*' || operator == '/') {
		return 2;
	} else if (operator == '+' || operator == '-') {
		return 1;
	}
	return 0;
}

출처:https://www.acmicpc.net/problem/1918

0개의 댓글