본문 바로가기
코딩 테스트 문제 및 풀이

[JS] 코딩 테스트 문제 : 후위식 연산(postfix) [스택]

by spare8433 2024. 1. 4.

문제 : 후위식 연산(postfix)



문제 설명


후위연산식이 주어지면 연산한 결과를 출력하는 프로그램을 작성하세요.
만약 3(5+2)-9 을 후위연산식으로 표현하면 `352+9-` 로 표현되며 그 결과는 12입니다.


▣ 입력설명

첫 줄에 후위연산식이 주어집니다. 연산식의 길이는 50을 넘지 않습니다.
식은 1~9의 숫자와 +, -, *, / 연산자로만 이루어진다.


▣ 출력설명

연산한 결과를 출력합니다.


▣ 입력예제 1

352+*9-


▣ 출력예제 1

12



내코드


function solution(s) {
  let answer;
  let stack = [];
  let regex = /[\+\-\*\/]/; // 사칙연산 문자 확인용 정규식

  for (const word of s) {
    // 사칙연산 문자일 경우
    if (regex.test(word)) {
      let right = parseInt(stack.pop()); // 좌측 숫자
      let left = parseInt(stack.pop()); // 우측 숫자

      // 계산 진행
      switch (word) {
        case "+":
          answer = left + right;
          break;
        case "-":
          answer = left - right;
          break;
        case "*":
          answer = left * right;
          break;
        case "/":
          answer = left / right;
          break;
        default:
          break;
      }
      stack.push(answer); // 계산 결과 stack 에 반영
      continue;
    }
    // 숫자의 경우 바로 스택에 등록
    stack.push(word);
  }

  answer = stack.pop();
  return answer;
}

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



풀이


  1. 후위식 문자열을 순회하면서 현재 문자를 사칙연산 문자 확인용 정규식을 통해 사칙연산 문자가 아닌 숫자의 경우 stack 에 push 하여 등록
  2. 사칙연산 문자의 경우 stack 에서 2번 pop 하여 각각 좌측 연산 숫자와 우측 연산 숫자로 구분한뒤 부호 에 맞게 계산하여 다시 stack 에 push 하여 등록
  3. 결과적으로 stack 남는 값이 최종 연산 결과를 담고 있으므로 pop 한 값을 반환




참고

https://www.inflearn.com/course/%EC%9E%90%EB%B0%94%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-%EB%AC%B8%EC%A0%9C%ED%92%80%EC%9D%B4/dashboard