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));
'Algorithm > ์ธํ๋ฐ(inflearn)' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[JavaScript/section 6] 06 - ๊ณต์ฃผ ๊ตฌํ๊ธฐ (0) | 2022.09.27 |
---|---|
[JavaScript/section 6] 05 - ์ ๋ง๋๊ธฐ (0) | 2022.09.27 |
[JavaScript/section 6] 03 - ํฌ๋ ์ธ ์ธํ๋ฝ๊ธฐ(์นด์นด์ค ๊ธฐ์ถ) (0) | 2022.09.25 |
[JavaScript/section 6] 02 - ๊ดํธ๋ฌธ์์ ๊ฑฐ (0) | 2022.09.23 |
[JavaScript/section 6] 01 - ์ฌ๋ฐ๋ฅธ ๊ดํธ (0) | 2022.09.23 |