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

waterglasses·2022년 3월 23일
0
post-thumbnail

📌 문제

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

📌 풀이

  • 후위 표기실을 돌면서 A부터 Z사이에 있으면(즉 영대문자이면) stack에 추가하고 아니면 stack에 있던 값들을 pop하면서 계산해준다.

📌 코드

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을 생각하기 까지가 오래 걸렸다.

프로그래머스의 올바른 괄호 문제에서 나의 처참한 코드를 맛보고 반성하였고 그 후에 로직을 따로 정리해서 문제를 풀었더니 조금 발전된 느낌이다. 아자아자!

profile
매 순간 성장하는 개발자가 되려고 노력하고 있습니다.

0개의 댓글