본문 바로가기
알고리즘/백준

[백준] 1918. 후위표기식

by vivi 2021. 11. 11.

 

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.HashMap;
import java.util.Map;
import java.util.Stack;
import java.util.StringTokenizer;

class Main {

	public static void main(String[] args) throws IOException {

		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st;
		Map<Character, Integer> map = new HashMap<>();
		map.put('*', 3);
		map.put('/', 3);
		map.put('+', 2);
		map.put('-', 2);
		map.put('(', 1);
		char[] n = br.readLine().toCharArray();
		StringBuilder sb = new StringBuilder();
		Stack<Character> s = new Stack<>();
		for (char c : n) {
			if (Character.isAlphabetic(c) || Character.isDigit(c)) {
				sb.append(c);
			} else if (c == '(') {
				s.push(c);
			} else if (c == ')') {
				char topToken = s.pop();
				while (topToken != '(') {
					sb.append(topToken);
					topToken = s.pop();
				}
			} else {
				while (!s.isEmpty() && map.get(s.peek()) >= map.get(c)) {
					sb.append(s.pop());
				}
				s.push(c);
			}
		}

		while (!s.isEmpty())
			sb.append(s.pop());

		System.out.println(sb.toString());

		br.close();
	}
}

 

참고 : https://runestone.academy/runestone/books/published/pythonds/BasicDS/InfixPrefixandPostfixExpressions.html

'알고리즘 > 백준' 카테고리의 다른 글

[백준] 16916. 부분 문자열  (0) 2021.11.16
[백준] 2407. 조합  (0) 2021.11.14
[백준] 18808. 스티커 붙이기  (0) 2021.11.02
[백준] 1629. 곱셈  (0) 2021.10.27
[백준] 5397. 키로거  (0) 2021.10.27

댓글