티스토리 뷰

 

 

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

 

1918번: 후위 표기식

첫째 줄에 중위 표기식이 주어진다. 단 이 수식의 피연산자는 알파벳 대문자로 이루어지며 수식에서 한 번씩만 등장한다. 그리고 -A+B와 같이 -가 가장 앞에 오거나 AB와 같이 *가 생략되는 등의

www.acmicpc.net

//https://www.acmicpc.net/problem/1918
const input = require('fs').readFileSync('./dev/stdin').toString().trim();
class Node {
	constructor(item) {
		this.item = item;
		this.prev = null;
	}
}

class Stack {
	constructor() {
		this.pointer = null;
		this.size = 0;
	}

	top() {
		return this.pointer.item;
	}

	push(item) {
		const node = new Node(item);
		node.prev = this.pointer;
		this.pointer = node;
		this.size += 1;
	}

	pop() {
		const popItem = this.pointer;
		this.pointer = this.pointer.prev;
		this.size -= 1;
		return popItem.item;
	}
}

const stack = new Stack();
let answer = '';
for (let i = 0; i < input.length; i++) {
	const char = input[i];
	switch (char) {
		case '(':
			stack.push(char);
			break;
		case ')':
			while (stack.size > 0 && stack.top() != '(') answer += stack.pop();
			stack.pop();
			break;
		case '*':
		case '/':
			while (stack.size > 0 && (stack.top() == '*' || stack.top() == '/')) answer += stack.pop();
			stack.push(char);

			break;
		case '+':
		case '-':
			while (stack.size > 0 && stack.top() != '(') answer += stack.pop();
			stack.push(char);
			break;
		default:
			answer += char;
	}
}

while (stack.size) {
	answer += stack.pop();
}

console.log(answer);
728x90
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/11   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30
글 보관함