알고리즘 정리

스택자료구조 사용한 후위식

조코조 2023. 5. 1. 11:21

Q. 3*(5+2)-9 을 후위연산식으로 표현하면 352+*9- 로 표현되며 결과값은 12이다.
    결과 값을 나오도록 해보자.

 

A. 숫자는 순차적으로 나열되며 만약 3+5라면 35+라고 표현이 된다. 

스택이라고 지정해놓은 배열에 숫자들을 넣고 연산자를 만날때마다 연산을 한 결과값을 다시 스택에 넣어주기로 함.

  **stack의 경우 위에 있는 값 부터 나오므로 순차적으로 rt,lt순으로 선언/할당해준다.

 

function solution(s) {
  let answer = 0;
  let stack = [];
  for (let x of s) {
    if (!isNaN(x)) { //숫자라면
      stack.push(Number(x)); //스트링을 숫자로 바꿔서 스택에 push
    } else {
      let rt = stack.pop();  //오른쪽부터 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));

stack의 push순서와 pop을 잘 활용하자.