๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Algorithm/์ธํ”„๋Ÿฐ(inflearn)

[ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ(JavaScript) ] section06 - 4 - ํ›„์œ„์‹ ์—ฐ์‚ฐ(postfix)

by YWTechIT 2021. 9. 1.
728x90

๐Ÿ“ section06 - 4 - ํ›„์œ„์‹ ์—ฐ์‚ฐ(postfix)

๊ฐ„๋‹จํ•˜๊ฒŒ ํ›„์œ„์‹ ์—ฐ์‚ฐ์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ณด์ž๋ฉด, ์šฐ๋ฆฌ๊ฐ€ ์ผ๋ฐ˜์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ์‚ฌ์น™์—ฐ์‚ฐ 7+7์€ ์ค‘์œ„ํ‘œ๊ธฐ์‹์ด๋ผ๊ณ  ํ•œ๋‹ค. (์ˆซ์ž ์‚ฌ์ด์— +-*/๊ฐ€ ๋“ค์–ด๊ฐ.) ํ›„์œ„ํ‘œ๊ธฐ์‹์€ ์ฃผ๋กœ ์ปดํ“จํ„ฐ๊ฐ€ ๋งŽ์ด ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ ๊ด„ํ˜ธ๊ฐ€ ์—†์–ด๋„ ์šฐ์„ ์ˆœ์œ„๋ฅผ ์ •ํ™•ํ•˜๊ฒŒ ์•Œ ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ์—์„œ S/W์—์„œ ๋„๋ฆฌ ์“ฐ์ธ๋‹ค.

 

  1. ์ˆซ์ž๋ฅผ ๋งŒ๋‚˜๋ฉด stack์— ๋‹ด๋Š”๋‹ค.
  2. ์—ฐ์‚ฐ์ž๋ฅผ ๋งŒ๋‚˜๋ฉด stack์—์„œ 2๊ฐœ์˜ ๊ฐ’์„ ๊บผ๋‚ด ๊ณ„์‚ฐํ•œ๋‹ค.
  3. ๊ณ„์‚ฐํ•œ ๊ฐ’์„ ๋‹ค์‹œ stack์— ๋„ฃ๋Š”๋‹ค.
  4. stack์— ๊ฐ’์ด 1๊ฐœ๋ฉด ๊ณ„์‚ฐ์ด ๋๋‚œ๋‹ค.

 

๋‚˜๋Š” ์ด๋ ‡๊ฒŒ ํ’€์—ˆ๋‹ค.

 

  1. ์ˆซ์ž๋Š” ๋ชจ๋‘ stack์— ๋„ฃ๋Š”๋‹ค.
  2. ์—ฐ์‚ฐ์ž๋ฅผ ๋งŒ๋‚ฌ์„ ๋•Œ stack์—์„œ ๊ฐ’ 2๊ฐœ๋ฅผ ๋นผ๊ณ  getCalculator ํ•จ์ˆ˜์— ๋„ฃ๋Š”๋‹ค.
  3. ์—ฐ์‚ฐ์ด ๋๋‚˜๋ฉด ๋‹ค์‹œ stack์— ๋„ฃ๋Š”๋‹ค.

 

์„ ์ƒ๋‹˜์€ ์ด๋ ‡๊ฒŒ ํ‘ธ์…จ๋‹ค.

 

  1. isNaN์ด false๋ฉด ์ˆซ์ž์ด๋ฏ€๋กœ ํ•ด๋‹น ๊ฐ’์„ stack์— ๋„ฃ๋Š”๋‹ค.
  2. ์ˆซ์ž๊ฐ€ ์•„๋‹Œ ๊ฐ’(์—ฐ์‚ฐ์ž)์€ stack์—์„œ pop์„ 2๋ฒˆ ์ง„ํ–‰ํ•˜์—ฌ lt, rt๋กœ ์„ ์–ธํ•œ๋‹ค.
  3. ์—ฐ์‚ฐ ์ดํ›„ ๋‹ค์‹œ stack์— ๋„ฃ๋Š”๋‹ค.

 

728x90

 

// ๋‚˜์˜ ์ฝ”๋“œ
let postFix = "352+*9-";

console.log(solution(postFix));

function getCalculator(operator, lt, rt) {
  switch (operator) {
    case "+":
      return lt + rt;
    case "-":
      return lt - rt;
    case "*":
      return lt * rt;
    case "/":
      return lt / rt;
  }
}

function solution(postFix) {
  let stack = [];
  for (let x of postFix) {
    if (/[0-9]/.test(x)) stack.push(+x);
    else {
      let operator = x;
      let rt = stack.pop();
      let lt = stack.pop();
      stack.push(getCalculator(operator, lt, rt));
    }
  }
  return +stack;
}

 

// ๊ฐ•์˜ ์ฝ”๋“œ
let postFix = "352+*9-";

function solution(s){
    let stack = [];
    for (let x of s){
        if(!isNaN(x)) stack.push(+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);
        }
    }
    return +stack;
}
๋ฐ˜์‘ํ˜•

๋Œ“๊ธ€