[백준] 1935. 후위 표기식2

최대 1 분 소요

문제 링크

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;
}

카테고리:

업데이트:

댓글남기기