https://www.acmicpc.net/problem/1935
const fs = require("fs");
const stdin = (
process.platform === "linux"
? fs.readFileSync("/dev/stdin").toString().trim()
: `5
ABC*+DE/-
1
2
3
4
5`
).split("\n");
const input = (() => {
let line = 0;
return () => stdin[line++];
})();
const calc = (op, numA, numB) => {
if (op === "*") return numA * numB;
if (op === "+") return numA + numB;
if (op === "-") return numA - numB;
if (op === "/") return numA / numB;
};
const N = parseInt(input());
const postfixNotation = input().split("");
const numbers = [];
const stack = [];
for (let i = 0; i < N; i++) {
numbers.push(Number(input()));
}
for (const item of postfixNotation) {
if (item >= "A" && item <= "Z") {
stack.push(numbers[item.charCodeAt(0) - "A".charCodeAt(0)]);
} else {
const numA = stack.pop();
const numB = stack.pop();
stack.push(calc(item, numB, numA));
}
}
console.log(stack.pop().toFixed(2));
마침 딱 오늘 자료구조를 배웠는데 바로 써먹을줄이야..
문제는 그렇게 어렵지 않았다. 그렇지만
charCodeAt
을 생각하기 까지가 오래 걸렸다.
프로그래머스의 올바른 괄호 문제에서 나의 처참한 코드를 맛보고 반성하였고 그 후에 로직을 따로 정리해서 문제를 풀었더니 조금 발전된 느낌이다. 아자아자!