[백준] 1935. 후위 표기식2
문제 링크
풀이 과정
스택 문제입니다. 연산자가 피연산자 뒤에 위치하는 후위 표기식의 특징에 따라, 연산자를 만나면 그 전에 있는 두 개의 피연산자들로 계산하고 다시 스택에 넣어줌으로써 올바른 계산이 가능해집니다.
코드
const fs = require("fs");
const stdin = (
process.platform === "linux"
? fs.readFileSync("/dev/stdin")
: `5
ABC*+DE/-
1
2
3
4
5`
)
.toString()
.trim()
.split("\n");
const input = (() => {
let line = 0;
return () => stdin[line++];
})();
let N = +input();
let postfix = input().split("");
let values = [];
let stack = [];
for (let i = 0; i < N; i++) values.push(+input());
for (let i = 0; i < postfix.length; i++) {
let ch = postfix[i];
if (ch >= "A" && ch <= "Z") {
stack.push(values[ch.charCodeAt(0) - "A".charCodeAt(0)]);
} else {
let b = parseFloat(stack.pop());
let a = parseFloat(stack.pop());
stack.push(getResult(a, b, ch));
}
}
console.log(stack.pop());
function getResult(a, b, ch) {
let res;
switch (ch) {
case "+":
res = (a + b).toFixed(2);
break;
case "-":
res = (a - b).toFixed(2);
break;
case "*":
res = (a * b).toFixed(2);
break;
case "/":
res = (a / b).toFixed(2);
break;
}
return res;
}
댓글남기기