2022/02/10) 4. 후위식 연산(postfix) [자료구조(스택, 큐)]

굥굥이·2022년 2월 10일
0
post-thumbnail

1. 문제

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

2. 해결방법

  1. stack을 이용해서 풀 것이므로, 우선 숫자를 만나면 무조건 push를 한다.
  2. 연산자를 만나면 push했던 값들을 pop해서 계산 후, 계산한 결과값다시 push한다.
    (주의해야 할 점 : '+'는 딱히 순서가 상관없지만 '-,*,%'는 순서가 중요하므로, 제일 먼저 나온 값은 제일 나중에 넣었던 값이므로 rt에 넣고, 그 다음으로 나오는 값은 lt에 넣는다.)

! 중위식(infix)과 후위식(postfix)

  • 중위식 : 피연산자 사이에 연산식이 있는 거(일반적인 식)
  • 후위식 : 피연산자 다음에 연산식이 있는 거

3. 정답

        <script>
            function solution(s){  
                let answer;
                stack=[];
                for(let x of s){ //isNaN(is not a number) 숫자가 아니면 true
                    if(!isNaN(x)) stack.push(Number(x)); //string이 넘어온 것이므로 숫자로 바꿔줘야함(연산해야하므로)
                    else {
                        let rt = stack.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));
        </script>

4. 내 코드와 비교 그리고 반성

후위식 연산이 뭔지 몰랐고 솔직히 문제 이해를 제대로 못했다. 돌머리인점을 반성해야겠다. 하지만 반복하면 돌머리도 똑똑이가 될 수 있다고 생각한다.

profile
아자아자 파이띵굥!

0개의 댓글