알고리즘

후위식연산(postfix)

살다보니개발자 2022. 12. 4. 18:53

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

 

 

입력 예제 1

352+*9-

 

출력예제1

12

 

 

 

function solution(s){  
    let answer;

    //스트링 중 숫자만 담을 stack 배열 
    let stack=[];

    // for of으로 s 매개변수 요소 추출
    for(let x of s){

        //isNaN에 반대 (!) 즉 숫자일시 stack 배열에 해당 요소 삽입
        if(!isNaN(x)) stack.push(Number(x));
        
        // 숫자가 아닌 + , * , - , / 일시
        else{
            //계산될 오른쪽에 위치할 숫자, stack배열에서 가장 최근에 삽입된 요소 ex) 1+2 일시 2를 뜻함
            let rt=stack.pop();
            
            // 계산될 왼쪽에 위치할 숫자, stack 배열에서 마지막에서 두번째로 삽입된 요소  ex) 1+2 일시 1을 뜻함
            let lt=stack.pop();

            //x가 + 일시 lt + rt 계산후 stack 배열 삽입
            if(x==='+') stack.push(lt+rt);

            //x가 - 일시 lt - rt 계산후 stack 배열 삽입
            else if(x==='-') stack.push(lt-rt);

            //x가 * 일시 lt * rt 계산후 stack 배열 삽입
            else if(x==='*') stack.push(lt*rt);

            //x가 / 일시 lt / rt 계산후 stack 배열 삽입
            else if(x==='/') stack.push(lt/rt);
        }
    }

    //위의 연산이 끝나면 결국 stack배열 0번째 인덱스에는 연산결과값이 남게됨
    answer=stack[0];
    return answer;
}

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

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

공주구하기(큐)  (0) 2022.12.11
쇠막대기(스택)  (0) 2022.12.07
크레인 인형뽑기(카카오 기출)  (2) 2022.12.02
괄호문자제거(스택)  (0) 2022.12.01
올바른 괄호(스택) - 자바스크립트  (0) 2022.11.27