공부기록/자바스크립트 코딩테스트

[백준/JS] 1935 후위표기식2

_우지 2022. 6. 29. 16:47

문제링크

 

1935번: 후위 표기식2

첫째 줄에 피연산자의 개수(1 ≤ N ≤ 26) 가 주어진다. 그리고 둘째 줄에는 후위 표기식이 주어진다. (여기서 피연산자는 A~Z의 영대문자이며, A부터 순서대로 N개의 영대문자만이 사용되며, 길이

www.acmicpc.net

 

아스키코드

자바스크립트에서 아스키코드 값을 알아내기 위해서는 charCodeAt 메소드를 사용한다.

s="AB" 
s.charCodeAt(i)

 

그렇다면 아스키코드 값을 문자열로 변경할때는 어떻게 할까? 다음과 같이 fromCharCode 메소드를 사용한다.

String.fromCharCode(아스키코드 변수)

 

소수점 자리수 정해주기

소숫점을 정해주기 위해서는 toFixed() 메소드를 사용한다.

toFixed(2) = 둘째자리까지 를 의미한다.

 

문제풀이

const fs = require("fs");

BOJkey = 0;

let input = fs
  .readFileSync(BOJkey ? "./자바스크립트로/1935/input.txt" : "./dev/stdin")
  .toString()
  .trim()
  .split("\n");

let num = input.shift();
let strr = input.shift();
let dic = {};
let stack = [];
let a = 0;
let b = 0;
for (let i = 0; i < num; i++) {
  let alpha = String.fromCharCode(65 + i);
  dic[alpha] = +input[i];
}
// console.log(input);
// console.log(dic);
// console.log(strr);
for (let i = 0; i < strr.length; i++) {
  switch (strr[i]) {
    case "*":
      b = stack.pop();

      if (typeof b == "string") b = dic[b];
      a = stack.pop();
      if (typeof a == "string") a = dic[a];
      stack.push(a * b);
      break;
    case "+":
      b = stack.pop();
      if (typeof b == "string") b = dic[b];
      a = stack.pop();
      if (typeof a == "string") a = dic[a];
      stack.push(a + b);
      break;
    case "/":
      b = stack.pop();
      if (typeof b == "string") b = dic[b];
      a = stack.pop();
      if (typeof a == "string") a = dic[a];
      stack.push(a / b);
      break;
    case "-":
      b = stack.pop();
      if (typeof b == "string") b = dic[b];
      a = stack.pop();
      if (typeof a == "string") a = dic[a];
      stack.push(a - b);
      break;
    default:
      stack.push(strr[i]);
      break;
  }
}

console.log(stack[0].toFixed(2));