후위연산식이 주어지면 연산한 결과를 출력하는 프로그램을 작성하세요.
만약 3(5+2)-9 을 후위연산식으로 표현하면 352+9- 로 표현되며 그 결과는 12입니다.
[입력설명]
첫 줄에 후위연산식이 주어집니다. 연산식의 길이는 50을 넘지 않습니다. 식은 1~9의 숫자와 +, -, *, / 연산자로만 이루어진다.
[출력설명]
연산한 결과를 출력합니다.
352+*9-
12
if(!isNan(x))
이 true라면, x는 숫자이다. 거짓이라면 숫자가 아니다. 이 문제는 스택을 활용한 문제이다. for(let x of s)를 했을 때, x가 숫자라면 push하고, 숫자가 아니라면(연산자라면) 계산한다. 처음 pop 결과를 rt(오른쪽 피연산자)에, 두번째 pop 결과를 lt(왼쪽 피연산자)에 넣는다. 그 후, 연산자에 따라 계산해서 stack.push해준다. 결국, 최종 결과인 answer은 stack[0]이 된다.
<html>
<head>
<meta charset="UTF-8">
<title>출력결과</title>
</head>
<body>
<script>
function solution(s){
let answer;
stack=[];
for(let x of s){
//숫자가 맞을 때 push
if(!isNaN(x)) stack.push(Number(x)); //x는 원래 string이기 때문에 Number으로 바꿈
else{
let rt=stack.pop(); //먼저 나오는것을 rt에 넣음
let lt=stack.pop(); //두번째로 나오는것을 lt에 넣음
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));
</script>
</body>
</html>
9/13
Number(x) 반드시 해줘야함 (이후 연산하기 위해서, 문자를 숫자로 바꾸어야 함)