μ•Œκ³ λ¦¬μ¦˜/νƒœκ·Έ 별 풀이

ν›„μœ„μ‹ μ—°μ‚°(postfix)

choi95 2021. 7. 13. 15:27

문제

ν›„μœ„μ—°μ‚°μ‹μ΄ μ£Όμ–΄μ§€λ©΄ μ—°μ‚°ν•œ κ²°κ³Όλ₯Ό 좜λ ₯ν•˜λŠ” ν”„λ‘œκ·Έλž¨μ„ μž‘μ„±ν•˜μ„Έμš”.
λ§Œμ•½ 3*(5+2)-9 을 ν›„μœ„μ—°μ‚°μ‹μœΌλ‘œ ν‘œν˜„ν•˜λ©΄ 352+*9- 둜 ν‘œν˜„λ˜λ©° κ·Έ κ²°κ³ΌλŠ” 12μž…λ‹ˆλ‹€.

 

λ¬Έμ œν’€μ΄

  • μ—°μ‚°μ‹μ—μ„œ μˆ«μžκ°€ λ‚˜μ˜¨λ‹€λ©΄ μŠ€νƒμ— 계속 μ €μž₯
  • 이후 μ—°μ‚°μžκ°€ λ‚˜μ˜¨λ‹€λ©΄ κ°€μž₯ μ΅œκ·Όμ— μ €μž₯ν•œ κ°’κ³Ό κ·Έ 이전에 μ €μž₯ν•œ 값을 μΆ”μΆœ
  • μΆ”μΆœν•œ 두 숫자λ₯Ό ν•΄λ‹Ή μ—°μ‚°μžλ₯Ό 톡해 ν•˜λ‚˜μ˜ κ²°κ³Όκ°’μœΌλ‘œ λ„μΆœ
  • λ„μΆœλœ 결과값을 μŠ€νƒμ— μ €μž₯_이후 반볡

μ½”λ“œ

function solution(p) {
  let answer = 0;
  let stack = [];
  let regExp = /^[0-9]+$/;

  for (let x of p) {
    if (!regExp.test(x)) {
      let rt = stack.pop(); 
      let lt = stack.pop(); 
      switch (x) {
        case "+":
          stack.push(lt + rt);
          break;
        case "-":
          stack.push(lt - rt);
          break;
        case "*":
          stack.push(lt * rt);
          break;
        case "/":
          stack.push(lt / rt);
          break;
        default:
          break;
      }
    } else {
      stack.push(Number(x));
    }
  }

  answer = stack.join("");
  return answer;
}

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

function solution(s){  
                let answer;
                let stack=[];
                for(let x of s){
                    if(!isNaN(x)) stack.push(Number(x));
                    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));