본문 바로가기

알고리즘 정리

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

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을 잘 활용하자.

'알고리즘 정리' 카테고리의 다른 글

기본 재귀함수  (0) 2023.05.24
Queue 자료구조  (0) 2023.05.02
해쉬 알고리즘  (1) 2023.04.20
슬라이딩 윈도우  (0) 2023.04.18
빈도 수 찾기  (0) 2022.11.14