후위식 연산(Postfix) : Stack

frenchkebab·2021년 8월 24일
0
post-thumbnail

내풀이1

function solution(s) {
  let stack = [];
  for (let x of s) {
    if (Number.isInteger(Number(x))) stack.push(x);
    else {
      let b = stack.pop();
      let a = stack.pop();
      let result = eval(a + x + b);
      stack.push(result.toString());
    }
  }
  const answer = Number(stack[0]);
  return answer;
}

let str = '352+*9-';
console.log(solution(str));

eval을 사용하여 문자열로 풀어보았다


내풀이2

function solution(s) {
  let stack = [];
  for (let x of s) {
    if (Number.isInteger(Number(x))) stack.push(Number(x));
    else {
      let b = stack.pop();
      let a = stack.pop();
      let result;
      switch (x) {
        case '+':
          result = a + b;
          break;
        case '-':
          result = a - b;
          break;
        case '*':
          result = a * b;
          break;
        case '/':
          result = a / b;
          break;
      }
    }
  }
  const answer = Number(stack[0]);
  return answer;
}

let str = '352+*9-';
console.log(solution(str));

가급적 에서 eval을 사용하지 말라고 하길래 switch 문으로 구현하였다.


solution 풀이

function solution(s) {
  let answer;
  let stack = [];
  for (let x of s) {
    if (!isNaN(x)) stack.push(Number(x));
    else {
      let rt = stack.pop();
      let lt = stack.pop();
      if (x === '+') stack.push(lt + rt);
      else if (x === '-') stack.push(lt - rt);
      else if (x === '*') stack.push(lt * rt);
      else if (x === '/') stack.push(lt / rt);
    }
  }
  answer = stack[0];
  return answer;
}

let str = '352+*9-';
console.log(solution(str));

그냥 무난하게 if 문 으로 푼 것 같다

배운 점

  • 숫자인지 판별할 때 2 가지 방법 사용이 가능
  1. if(Number.isInteger(Number(x))
  2. if(!isNaN(x))

-> 2번이 훨씬 간단해보인다..

profile
Blockchain Dev Journey

0개의 댓글