227. Basic Calculator II

๋Š˜๋ณดยท2021๋…„ 10์›” 22์ผ
0

LeetCode

๋ชฉ๋ก ๋ณด๊ธฐ
57/69

๐Ÿ’ก ํ’€์ด

// O(N)
var calculate = function (s) {
  let num = '';
  let sign = '';
  let stack = [];

  for (let i = 0; i <= s.length; i++) {
    let cur = s[i];
    // ์ˆซ์ž๊ฐ€ ๋‚˜์˜ฌ ๋•Œ (10์˜ ์ž๋ฆฌ๋ฅผ ๋„˜์–ด๊ฐˆ ๋•Œ๋„ ํฌํ•จ)
    if (!isNaN(s[i])) num += s[i];

    // ๊ธฐํ˜ธ๊ฐ€ ๋‚˜์˜ฌ ๋•Œ
    if (isNaN(s[i])) {
      num = Number(num);

      if (sign === '*') stack.push(stack.pop() * num);
      else if (sign === '/') stack.push(Math.trunc(stack.pop() / num));
      else if (sign === '+') stack.push(num);
      else if (sign === '-') stack.push(-num);
      else stack.push(num);
      sign = cur;
      num = '';
    }
    // console.log('num: ', num);
    // console.log('stack: ', stack);
  }
  //   console.log('answer: ', stack);
  //   console.log(stack.reduce((acc, cur) => acc + cur));
  return stack.reduce((acc, cur) => acc + cur);
};

let s = '14-3/2';
calculate(s);

๐Ÿ“ ์ •๋ฆฌ

์–ด์ œ์— ์ด์–ด์„œ stack์„ ์ด์šฉํ•œ ๋ฌธ์ œ์˜€๋‹ค. ํ•ด๊ฒฐํ•˜๋Š”๋ฐ ๋งค์šฐ ์˜ค๋žœ ์‹œ๊ฐ„์ด ๊ฑธ๋ ธ๋˜ ๋ฌธ์ œ์˜€๋‹ค.(์–ด์ œ๋ณด๋‹ค ๋”..!)

์ฃผ์˜ํ•ด์•ผ ํ•  ๋ถ€๋ถ„์ด ๊ณฑ์…ˆ, ๋‚˜๋ˆ—์…ˆ์ด ์žˆ์„ ๋•Œ๋Š” ๋‹ค๋ฅธ ๊ธฐํ˜ธ๋ณด๋‹ค ๋จผ์ € ์—ฐ์‚ฐ์„ ํ•ด์ค˜์•ผ ํ–ˆ๋Š”๋ฐ, ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ๊ณฑํ•˜๊ธฐ ํ˜น์€ ๋‚˜๋ˆ„๊ธฐ๊ฐ€ ๋‚˜์˜ค๋ฉด stack ๋ฐฐ์—ด์— ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ๊ณ„์‚ฐํ•ด์„œ ๋ฐ”๋กœ pushํ•˜๋Š” ํ˜•ํƒœ๋กœ ๊ตฌํ˜„ํ•˜์˜€๋‹ค.

์ˆ˜์ •, ์ง€์ ์„ ํ™˜์˜ํ•ฉ๋‹ˆ๋‹ค!

๋ฌธ์ œ ๋งํฌ

https://leetcode.com/problems/basic-calculator-ii/

LeetCode GitHub

https://github.com/tTab1204/LeetCode

0๊ฐœ์˜ ๋Œ“๊ธ€