ํ๋ก๊ทธ๋๋ฐ ์ธ์ด ๊ฐ๋ฐ 2-2
๋ค์์ผ๋ก๋ ํ ํฐํ์ ๋งํน์ ๋๋ค.
ํ ๋ฅธํ๋ ๋ฌด์์ผ๊น์?
์ด์ ์ ์ฐ๋ฆฌ๊ฐ ์ํํ๋ printํจ์ ๊ตฌํํ๊ธฐ ๊ณผ์ ์์ ๊ฐ๊ฐ NAME์ํ, PARAM์ํ๋ก ๋๋์๋๊ฒ์ ๊ธฐ์ตํ ๊ฒ์ ๋๋ค.
์ด๋ NAME / PARAM / ENDL ์ผ๋ก ๋๋๊ฒ์ด ๋ฐ๋ก ํ ํฐํ๋ผ๊ณ ํ๊ณ , ์ผ๋ฐ์ ์ผ๋ก ๋ค์๊ณผ ๊ฐ์ด ํ๊ธฐํฉ๋๋ค.
<name>(<param>);
<์ > ์ฌ์ด์ ๋ค์ด๊ฐ ๋ด์ฉ์ ๋ณํ๋ค๊ณ ๋ณผ ์ ์๊ฒ ๋ค์!
์ด๋ฐ์์ผ๋ก ์์๋ ํ ํฐํ๋ฅผ ์งํํ์๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
132+-75.3์ ๋จผ์ for๋ฌธ์ผ๋ก ๋ถ์ํ ์ ์๋๋ก ๋ฌธ์๋ฐฐ์ด๋ก ๋ํ๋ด๊ณ ์ด๋ ํ ๊ท์น์ ๋ง๊ฒ ์ํ๋ฅผ ํ๊ธฐํ์ฌ ๋ค์๊ณผ ๊ฐ์ด ๋ฌถ์ต๋๋ค.
<digit>+<digit> ๋๋ <digit><oper><-digit> ๋๋ <int><oper><float>
์์ฒ๋ผ ๊ฐ๋ฐ์๋ง๋ค ๋ค์ํ ํํ๊ฐ ์กด์ฌํ ์ ์์ต๋๋ค.
๊ทธ๋ฆฌ๊ณ ์ด ๊ตฌ๋ถ๋ ํ ํฐ์ ๋ฆฌ์คํธ(ํ)์ ์ง์ด๋ฃ์ผ๋ฉด ํ ํฐ ๋ฆฌ์คํธ๊ฐ ์์ฑ๋์ด ์ง๋๋ค.
์ด๋ ๋ง๋ค์ด์ง ํ ํฐ๋ฆฌ์คํธ๋ ๋์ค์ ์์ชฝ๋ถํฐ ์ฐจ๋ก๋๋ก ์ฐ์ด๊ฒ ๋ฉ๋๋ค. (๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ๊ผญ queue๋ก ๊ตฌํํ์ฌ์ผ ํฉ๋๋ค)
๋งํน์ look forward๋ผ๊ณ ๋ ๋ถ๋ฆฌ๋ ๊ธฐ๋ฒ์ ๋๋ค.
์ ์ฒด ๊ตฌ๋ฌธ์ ๋ถ์ํ๋ค๊ฐ ๋๋์์ค๊ธฐ ์ํด ์ฌ์ฉํ๋ ๊ธฐ๋ฒ์ธ๋ฐ, ์๋ฅผ๋ค์ด ์ซ์๊ฐ ๋ค์ด์ค๋ฉด int๋ผ๊ณ ํ ํฐํ ํ๋ค๊ฐ, ์ค๊ฐ์ ์์ซ์ ('.')์ด ๋์ค๋ฉด ์ฒซ ์ซ์๋ก ๋์๊ฐ์ float์ด๋ผ๊ณ ํ ํฐํ ํ๋ค๊ณ ๊ฐ์ ํฉ๋๋ค.
์๊น์ 132+-75.3์์๋ ์ฒซ ๋ฌธ์๊ฐย โ-โ์ด๋ฏ๋ก ํด๋น ์์น์ ์ธ๋ฑ์ค๋ฅผ ์ด๋๊ฐ์ ๊ธฐ์ตํด๋์ผ๋ฉด ๋๊ฒ ๊ตฐ์!
ํ์ง๋ง ๋์๊ฐ ์์น๊ฐ ์ฌ๋ฌ๊ฐ๋ผ๋ฉด ๋ณ์๋ฅผ ์ฌ๋ฌ๊ฐ ๋ง๋ค์ด์ผํ๋ ์ํฉ์ด ์๊น๋๋ค.
๊ทธ๋์ ์ฐ๋ฆฌ๋ stack์ ์ฌ์ฉํ๊ฒ ๋ฉ๋๋ค.
stack์ ์ฌ์ฉํ๊ฒ๋๋ฉด ์คํ์ ์ฑ์ง์ ์ํด ๋ง์น ctrl+z(์คํ์ทจ์)์ ๊ฐ์ด ์ต๊ทผ์ ์ ์ฅ๋๊ฒ ๋ถํฐ ์ํ๋ฅผ ๋๋๋ฆฌ๊ฒ ๋ฉ๋๋ค.
๊ทธ๋ ๋ค๋ฉด ๋ณธ๊ฒฉ์ ์ผ๋ก ์์์ฒ๋ฆฌ๋ฅผ ํด๋ด ์๋ค.
ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ 8ํ ์ ์ฐ์ฐ์ผ๋ก ๊ตฌ์ฑ๋์ด ์๋ค๊ณ ํด๋ ๊ณผ์ธ์ด ์๋๋๋ค.
๊ทธ ์ด์ ๋ ์ด์ฐฝ๊ธฐ ์ปดํจํฐ์ ์ด๋ฆ์์๋ ์ดํด๋ณผ ์ ์๋ฏ์ด โComputeโํด์ฃผ๋ ๊ธฐ๊ณ ์ฆ, ๊ณ์ฐ๊ธฐ๋ผ๊ณ ๋ณผ ์ ์์ต๋๋ค.
์ปดํจํฐ๊ฐ ํ๋ ์ฐ์ฐ์ค์ ๋ํ์ ์ธ๊ฒ ์์์ฒ๋ฆฌ, ํจ์์ฒ๋ฆฌ, ๋ณ์์ฒ๋ฆฌ, ๋ ผ๋ฆฌ์ฒ๋ฆฌ ๋ฑ ๋ค์ํ๊ฒ์ด ์๋๋ฐ, ๊ทธ์ค ๊ฐ์ฅ ๊ธฐ์ด๊ฐ ๋๋ ์์์ฒ๋ฆฌ๋ฅผ ์ดํด๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค.
์ปดํจํฐ์ ์ถ๋ฐ์ ์ฌ๋์ด ์ผ์ผํ ๊ณ์ฐํ๊ธฐ ์ด๋ ค์ด ๋ณต์กํ ์์์ ๋น ๋ฅด๊ณ ์ ํํ๊ฒ(์ค๋ฅ์์ด) ๊ณ์ฐํ๋๊ฒ์ ๋ชฉ์ ์ผ๋ก ์ถ๋ฐํ์์ต๋๋ค. ํ์ง๋ง ์ด๋ฅผ ์ปดํจํฐ๊ฐ ์ดํดํ ์ ์๊ฒ ํํํ๋ ค๋ฉด ๊ธฐ๊ณ์ด๋ก ๊ธฐ์ ํ ์ ๋ฐ์ ์์ต๋๋ค.
ํ์ง๋ง ์์ฆ์ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ค์ ๊ฑฐ์ ๋ค ์ฌ๋์ด ์์ฑํ๋ย โ1+1โณ๊ณผ ๊ฐ์ ํํ์์ ์ดํดํ๊ณ ์์ต๋๋ค.
๊ณผ์ฐ ์ด๋ป๊ฒ ๊ทธ๋ ๊ฒ ๋ ๊น์?
๋ฐ๋ก ๊ทธ ๋น๋ฐ์ ์์ํธ๋ฆฌ์ ์์ต๋๋ค.
์์ํธ๋ฆฌ๋ ๋ฐฉ๊ธ์ ์ ๋ฐฐ์ด โํ ํฐํ ๊ธฐ๋ฒโ์ ์ด์ฉํ์ฌ ๊ตฌ์ฑํ ์ ์๋๋ฐ ๋ค์๊ณผ ๊ฐ์ ํ์์ ๋๋ค.
์ด๋ ๊ฒ ๊ตฌ์ฑ๋ ์์ํธ๋ฆฌ๋ ๋ค์๊ณผ ๊ฐ์ ์์ฑ์ ๊ฐ์ง๋๋ค.
1. ๊ฐ์ฅ ๋จผ์ ์ฒ๋ฆฌ๋ ์ฐ์ฐ์ ๊ฐ์ฅ ํ์์ ์์นํ๋ค. 2. ๊ฐ์ฅ ๋์ค์ ์ฒ๋ฆฌ๋ ์ฐ์ฐ์ ๋งจ ์(์ต์๋จ, root)์ ์์นํ๋ค. 3. ์ฐ์ฐ์์ left์ right ๋ ํญ์ ์กด์ฌํ๋ค. (๋ ธ๋๊ฐ full์ธ ์ํ๋ผ๊ณ ํ๋ค.)ย 4. ์ซ์์๋ left์ right๊ฐ ์กด์ฌํ์ง ์๋๋ค. 5. ๋ถํธ๋ ์ฐ์ฐ์๋ก ์ทจ๊ธ๋์ด์ง์ง ์๊ณ , ์ซ์์ ํฌํจ๋์ด ์ทจ๊ธ๋๋ค.
์ ์ด๋ ๊ฒ ์์ํธ๋ฆฌ๋ฅผ ๊ตฌ์ฑํ์ฌ ๊ณ์ฐํ ๊น์?
๋ง์ฐฌ๊ฐ์ง๋ก ๋ฐฉ๊ธ์ ์ ๋ฐฐ์ด ํ์์ฒ๋ฆฌ๋ฐฉ์(postorder)์ ์ฐ๊ด์ด ๋์ด์์ต๋๋ค.
์์ํธ๋ฆฌ๋ฅผ postorder๋ก ์ถ๋ ฅํ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ด ๋ณด์ด๊ฒ ๋ฉ๋๋ค.
1 3 + 5 -
ํ์ ๋ณด๋ ์์๊ณผ๋ ๋ง์ด ๋ค๋ฆ ๋๋ค! ๋ฐ๋ก ์ด๋ฐ ์์ ํํ๋ฅผ RPN (Reverse Polish Notation) ์ด๋ผ๊ณ ํฉ๋๋ค.
์ปดํจํฐ์ ๋ฉ๋ชจ๋ฆฌ๋ ๊ธฐ๋ณธ์ ์ผ๋ก STACK๊ตฌ์กฐ๋ฅผ ๋๊ณ ์์ต๋๋ค. (ํ๋ก๊ทธ๋๋ฐ ์ ๋ฌธ์๊ฐ๋ stack ๋ฉ๋ชจ๋ฆฌ์ heap ๋ฉ๋ชจ๋ฆฌ๊ฐ ์๋ค๋ ์ ์์๋ ์ ์ ์๋ฏ์ด)
์ฐ์ฐ์ ์ฒ๋ฆฌํ๊ธฐ ์ํด์๋ ๋จผ์ ์ด๋ค ๊ฐ์ ์ฐ์ฐํ ์งย โํผ์ฐ์ฐ์"๋ฅผ ์๊ณ ์์ด์ผ ํฉ๋๋ค. ์ฆ, ์ด๋ ๋ฉ๋ชจ๋ฆฌ์์ ํผ์ฐ์ฐ์(์ฐ์ฐ๊ฐ)์ด ๋ฏธ๋ฆฌ ์ฌ๋ผ๊ฐ ์์์ ๋ปํฉ๋๋ค.
๊ทธ๋์ ํผ์ฐ์ฐ์๋ค์ ๋จผ์ ๋ช ์ ํ ํ, ์ฐ์ฐ์ ์ํํ๊ฒ ๋๋ ๊ฒ์ด์ฃ .
RPNํด์์ ๊ท์น์ ์ดํด๋ด ์๋ค.
1. ์ซ์๋ ๋ฉ๋ชจ๋ฆฌ ์คํ์ push ํ๋ค. 2. ์ฐ์ฐ์๋ ๋ฉ๋ชจ๋ฆฌ ์คํ์์ 2๊ฐ์ ๊ฐ์ popํ์ฌ ์ฐ์ฐ์ ์ํํ๋ค. 3. ์ฐ์ฐ์ ์ํ ํ ํ ๊ฒฐ๊ณผ๊ฐ์ ๋ค์ ๋ฉ๋ชจ๋ฆฌ์ push ํ๋ค.
๊ทธ๋ ๋ค๋ฉด 1 3 + 5 - ๋ก ๊ตฌ์ฑ๋ ์์์ ์ด๋ป๊ฒ ์ฒ๋ฆฌ๋ ๊น์?
#1 - stack : [1] <- push 1 #2 - stack : [1, 3] <- push 2 #3 - stack : [] <- pop 3 as a, pop 1 as b #4 - stack : [4] <- push add b, a #5 - stack : [4, 5] <- push 5 #6 - stack : [] <- pop 5 as a pop 4 as b #7 - stack : [-1] <- push sub b, a
์ฐ์ฐ์ ๋ชจ๋ ๋ง์น๊ณ ์คํ์ ๋จ์ ๊ฐ์ด -1์ด๋ฏ๋ก ์ ์์์ ๊ฒฐ๊ณผ๋ย โ-1โณ์ด ๋ฉ๋๋ค. ์ฌ๊ธฐ์ ์ฃผ์ํ ์ ์ ์ฐ์ฐ์ ํญ์ b - a, b + a ์ ๊ฐ์ด b, a์ ์์๋ก ์งํ๋๋ค๋ ์ ์ ๋๋ค.
๊ทธ๋ ๋ค๋ฉด +, - ์ฐ์ฐ์ด ์๋ (, ) ๊ฐ ๋ค์ด๊ฐ๊ฑฐ๋, *, / ์ ๊ฐ์ด ์ฐ์ ์์๊ฐ ๋ค๋ฅธ ์ฐ์ฐ๋ค์ ์ด๋ป๊ฒ ์ฐ์ฐ์ ์ฐ์ ์์๋ฅผ ๊ตฌํํ ์ ์์๊น์?
๋ฐ๋ก ์์ํธ๋ฆฌ๋ฅผ ๊ตฌํํ๋ฉด์ ์๋์ ๊ฐ์ ๊ท์น์ ๋ฐ๋ฅด๋ฉด ๋ฉ๋๋ค.
์! ๊ทธ๋ ๋ค๋ฉด ์ด์ ์ฐ์ต๋ฌธ์ ๋ก ์๋์ ๋ด์ฉ์ ๊ฐ๊ฐ ๊ณผ์ ๋ก ํ์ด์ค๋ฉด ๋ฉ๋๋ค.
1) ์์ํธ๋ฆฌ๋ก ํํํ๊ณ (๊ท์น ๋ง์ถฐ์), step by step ์ผ๋ก ์ค๋ช ํ๊ธฐ 2) RPN์ผ๋ก ํํํ๊ณ step by step ์ผ๋ก ๊ฒฐ๊ณผ ๊ณ์ฐํ๊ธฐ
๋ค์์๊ฐ์๋ C++๋ก ์ง์ ์์ํธ๋ฆฌ๋ฅผ ๊ตฌํํด๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค.














