// 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/