Algorithm/์ธํ”„๋Ÿฐ(inflearn)

[JavaScript/section 6] 04 - ํ›„์œ„์‹ ์—ฐ์‚ฐ(postfix)

_์„ฑํ˜ธ_ 2022. 9. 26. 20:32
728x90
๋ฐ˜์‘ํ˜•

๐Ÿ“Œ 04 - ํ›„์œ„์‹ ์—ฐ์‚ฐ(postfix)

ํ›„์œ„์—ฐ์‚ฐ์‹์ด ์ฃผ์–ด์ง€๋ฉด ์—ฐ์‚ฐํ•œ ๊ฒฐ๊ณผ๋ฅผ ์ถœ๋ ฅํ•˜๋Š” ๋ฌธ์ œ์ด๋‹ค.

๐Ÿ˜‚ ๋‚˜์˜ ํ’€์ด ๋ฐฉ๋ฒ•

์ฒ˜์Œ์—” ์—ฐ์‚ฐํ•œ ๊ฒฐ๊ณผ๋ฅผ ์Šคํƒ์— ๋„ฃ์ง€ ์•Š๊ณ  answer ๋ณ€์ˆ˜์— ์ €์žฅํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ํ’€์—ˆ๋‹ค. ํ’€์ด ๊ณผ์ •์—์„œ answer = 0์ผ ๊ฒฝ์šฐ ์—ฐ์‚ฐ์ด ์ด๋ฃจ์–ด์ง„ ์ ์ด ์—†๋‹ค๋Š” ๊ฒƒ์œผ๋กœ ์ƒ๊ฐํ•˜์—ฌ ์—ฐ์‚ฐ์„ ์œ„ํ•ด pop() ํ•จ์ˆ˜๋ฅผ ๋‘ ๋ฒˆ ์ด์šฉํ•ด ๋ฐฐ์—ด์—์„œ ์ž๋ฃŒ๋ฅผ ๊บผ๋‚ธ๋‹ค. ํ•˜์ง€๋งŒ ๋‹ค์Œ๊ณผ ๊ฐ™์ด '655-+'์ด ์ž…๋ ฅ์œผ๋กœ ์ฃผ์–ด์ง„๋‹ค๋ฉด ์ฒซ ๋ฒˆ์งธ ์—ฐ์‚ฐ์˜ ๊ฒฐ๊ณผ๊ฐ€ 0์ด ๋‚˜์˜ค๊ธฐ ๋•Œ๋ฌธ์— ์œ„ ํ’€์ด ๋ฐฉ๋ฒ•์ด ์˜ณ์ง€ ์•Š๋‹ค๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค. ์—ฐ์‚ฐํ•œ ๊ฒฐ๊ณผ๋ฅผ ์Šคํƒ์— ๋„ฃ๋Š” ๋ฐฉ์‹์œผ๋กœ ํ’€๋ฉด ์ด๋Ÿฌํ•œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค. ํ’€์ด ๋ฐฉ๋ฒ•์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

  • for ๋ฌธ์„ ๋Œ๋ฉฐ ํ•ด๋‹น ๊ฐ’์ด ์ˆซ์ž์ธ์ง€ ์•„๋‹Œ์ง€ ๊ฒ€์‚ฌํ•œ๋‹ค. ์ด๋Š” isNaN() ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•˜๋ฉด ๋œ๋‹ค.
  • ์ˆซ์ž๋ผ๋ฉด ์Šคํƒ์— ํ•ด๋‹น ๊ฐ’์„ ์ˆซ์ž(Number)๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ๋„ฃ์–ด์ค€๋‹ค.
  • ์—ฐ์‚ฐ์ž๋ผ๋ฉด ์Šคํƒ์—์„œ ์ž๋ฃŒ๋ฅผ ๊บผ๋‚ด ๊ฐ๊ฐ rt(์ฒซ ๋ฒˆ์งธ๋กœ ๊บผ๋‚ธ ์ž๋ฃŒ), lt(๋‘ ๋ฒˆ์งธ๋กœ ๊บผ๋‚ธ ์ž๋ฃŒ) ๋ณ€์ˆ˜์— ์ €์žฅํ•œ ํ›„ ์กฐ๊ฑด์— ๋”ฐ๋ผ ์—ฐ์‚ฐ์„ ํ•œ ๊ฒฐ๊ณผ๋ฅผ ์Šคํƒ์— ์ €์žฅํ•œ๋‹ค. ์ฒ˜์Œ ์Šคํƒ์—์„œ ๊บผ๋‚ธ ์ž๋ฃŒ๊ฐ€ ๋‘ ๋ฒˆ์งธ ํ”ผ์—ฐ์‚ฐ์ž์— ํ•ด๋‹นํ•œ๋‹คโ—
  • for ๋ฌธ์ด ๋๋‚˜๋ฉด ์Šคํƒ์˜ ์ฒซ ๋ฒˆ์งธ ์ธ๋ฑ์Šค์— ํ•ด๋‹นํ•˜๋Š” ๊ฐ’์ด ์—ฐ์‚ฐํ•œ ๊ฒฐ๊ณผ์ด๋‹ค.

 

๐Ÿ“ ํ’€์ด

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 = '655-+';
console.log(solution(str));