728x90
๐ section06 - 4 - ํ์์ ์ฐ์ฐ(postfix)
๊ฐ๋จํ๊ฒ ํ์์ ์ฐ์ฐ์ ๋ํด์ ์์๋ณด์๋ฉด, ์ฐ๋ฆฌ๊ฐ ์ผ๋ฐ์ ์ผ๋ก ์ฌ์ฉํ๋ ์ฌ์น์ฐ์ฐ 7+7
์ ์ค์ํ๊ธฐ์์ด๋ผ๊ณ ํ๋ค. (์ซ์ ์ฌ์ด์ +-*/
๊ฐ ๋ค์ด๊ฐ.) ํ์ํ๊ธฐ์์ ์ฃผ๋ก ์ปดํจํฐ๊ฐ ๋ง์ด ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ผ๋ก ๊ดํธ๊ฐ ์์ด๋ ์ฐ์ ์์๋ฅผ ์ ํํ๊ฒ ์ ์ ์๋ค๋ ์ ์์ S/W
์์ ๋๋ฆฌ ์ฐ์ธ๋ค.
- ์ซ์๋ฅผ ๋ง๋๋ฉด
stack
์ ๋ด๋๋ค. - ์ฐ์ฐ์๋ฅผ ๋ง๋๋ฉด
stack
์์ 2๊ฐ์ ๊ฐ์ ๊บผ๋ด ๊ณ์ฐํ๋ค. - ๊ณ์ฐํ ๊ฐ์ ๋ค์
stack
์ ๋ฃ๋๋ค. stack
์ ๊ฐ์ด 1๊ฐ๋ฉด ๊ณ์ฐ์ด ๋๋๋ค.
๋๋ ์ด๋ ๊ฒ ํ์๋ค.
- ์ซ์๋ ๋ชจ๋
stack
์ ๋ฃ๋๋ค. - ์ฐ์ฐ์๋ฅผ ๋ง๋ฌ์ ๋
stack
์์ ๊ฐ 2๊ฐ๋ฅผ ๋นผ๊ณgetCalculator
ํจ์์ ๋ฃ๋๋ค. - ์ฐ์ฐ์ด ๋๋๋ฉด ๋ค์
stack
์ ๋ฃ๋๋ค.
์ ์๋์ ์ด๋ ๊ฒ ํธ์ จ๋ค.
isNaN
์ดfalse
๋ฉด ์ซ์์ด๋ฏ๋ก ํด๋น ๊ฐ์stack
์ ๋ฃ๋๋ค.- ์ซ์๊ฐ ์๋ ๊ฐ(์ฐ์ฐ์)์
stack
์์pop
์ 2๋ฒ ์งํํ์ฌlt, rt
๋ก ์ ์ธํ๋ค. - ์ฐ์ฐ ์ดํ ๋ค์
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;
}
๋ฐ์ํ
๋๊ธ