문제

후위연산식이 주어지면 연산한 결과를 출력하는 프로그램을 작성하세요.

만약 3*(5+2)-9 을 후위연산식으로 표현하면 352+*9- 로 표현되며 그 결과는 12입니다.

입력

첫 줄에 후위연산식이 주어집니다. 연산식의 길이는 50을 넘지 않습니다.

식은 1~9의 숫자와 +, -, *, / 연산자로만 이루어진다.

출력

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

예제입력

▣ 입력예제 1

352+*9-

▣ 출력예제 1

12


🙌🏻 문제 이해하기

문제를 해결하기 위해 어떤 방법을 사용해야하는지 생각해보자 :)

  1. 문자열로 받은 argument를 하나씩 확인해야한다. ➡️ split 메서드 사용하여 배열로 만들기
  2. 반복문으로 순회를 하면서 숫자를 만나면 stack에 넣는다.
  3. 연산자를 만나면 stack에서 2개의 값을 꺼내 계산한다.
  4. 계산한 값을 다시 stack에 넣는다.
  5. 반복문이 종료되었을 때 계산된 값을 반환한다.

✅ solution

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
function solution(s) {
let stack = [];
let array = s.split('');

array.forEach((item) => {
if (!isNaN(item)) stack.push(Number(item));
else {
let right = stack.pop();
let left = stack.pop();

switch (item) {
case '*':
return stack.push(left * right);
case '+':
return stack.push(left + right);
case '-':
return stack.push(left - right);
case '/':
return stack.push(left / right);
}
}
});

return Number(stack);
}

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

😎 Review

이번 문제는 어떻게 풀지만 알고 있으면 쉽게 구현할 수 있는 문제인 것 같았다.

풀면서 오류를 범했던 것이 있다면 stack에 넣을 값을 숫자로 변환하지 않고 그대로 넣어서 결과값이 147이 나와 깜짝 놀랬다는 것… (앗차차 나의 실수😃)