0. ์์
1 + 3.334 / (4.28 * (110 - 7729) = ?
์ ์์ ๊ณ์ฐํด ๋ณผ๊น์?
์ฌ์น ์ฐ์ฐ์ ์ด๋ฑํ๊ต ๊ณผ์ ์์ ๋ฐฐ์ฐ๋ฏ๋ก, ๋๋ถ๋ถ์ ์ฌ๋์ ํฐ ์ด๋ ค์ ์์ด ํด๋ผ ์ ์์ต๋๋ค. ์์๋ ์ธ์ ๋ฐฐ์ฐ๋์ง ์์์ต๋๋ค๋ง..
๊ทธ๋ฌ๋ ์ปดํจํฐ๋ ์ด๋ฑํ๊ต๋ฅผ ๋ค๋์ง ์๊ธฐ ๋๋ฌธ์, ์ ์์ ์ง๊ด์ ์ผ๋ก ํ ์ ์์ต๋๋ค.
์ด ๋ง์, ์ปดํจํฐ์๊ฒ ๋ํ๊ธฐ, ๋นผ๊ธฐ ๋ฑ์ ์ฐ์ฐ์๋ฅผ ๊ฐ๋ฅด์น ํ ์ฐ์ฐ์์ ์ฐ์ ์์๊น์ง ์๋ ค์ค ๋ค์!
์ฐ์ ์์์ ๋ฐ๋ผ ๊ฐ ํญ์ ๊ณ์ฐํ๋ ๋ฐฉ๋ฒ์ ์๋ ค์ฃผ์ด์ผ ํ๋ค๋ ๊ฒ์ด์ฃ .
์ปดํจํฐ์ ์นํด์ง๊ธฐ ์ํด, ์ ํํ๋ ์๊ณ ๋ฆฌ์ฆ๊ณผ ์นํด์ง๊ธฐ ์ํด ์ด๋ฅผ ์ง์ ๊ตฌํํด๋ณด๋ ์๊ฐ์ ๊ฐ๋๋ก ํ๊ฒ ์ต๋๋ค.
๋ฌผ๋ก , ์์ฆ์์ ์ปดํ์ผ๋ฌ๋ ์ด๋ฅผ ์ ํด๋
๋๋ค.
IDE์์ ์์ ์๋ฆฌ์กฐ๋ฆฌ ์
๋ ฅํ ํ ๋น๋ ๋๋ฆฌ๋ฉด ๊ฒฐ๊ณผ๊ฐ ์ง ํ๊ณ ๋์ค๋ ๋ง๋ฒ์ ์ธ์...!
(์ฌ์น์ฐ์ฐ์ ํ ์ ์๋๋ก ๊ณ ์๋ ์ปดํ์ผ๋ฌ์๊ฒ ์ฌ์น์ฐ์ฐ์ ๊ตฌํํ ์ฝ๋๋ฅผ ๋น๋ํ๋ ๊ณผ์ ์์ ์ฌ์น์ฐ์ฐ์ ์ํํ์ฌ ๊ธฐ๊ณ์ด๋ก ๋ง๋๋...
์ฌ์น์ฐ์ฐ์ ์ฌ์น์ฐ์ฐํ์ฌ ๋ค์ ์ฌ์น์ฐ์ฐํ๋ CPU...)
1. ์ค์ ํ๊ธฐ๋ฒ: Infix
1 + 3.334 / (4.28 * (110 - 7729)
์ค์ํ๊ธฐ๋ฒ์ด๋, ํํ ์ฐ๋ ์์์ ํ๊ธฐ๋ฒ์
๋๋ค.
๋งจ ์ฒ์ ๋ณด์ฌ๋๋ ธ๋ ์ ์ฒ๋ผ์ฐ์ฐ์๊ฐ ํผ์ฐ์ฐ์ ๊ฐ์ด๋ฐ ์ค๋๋ก ์์ ํ๊ธฐํ๋ ๋ฐฉ๋ฒ์ด์ง์.
๊ทธ๋ฌ๋ ์ปดํจํฐ๊ฐ ์ด๋ฅผ ์ง์ ๊ณ์ฐํ๊ธฐ์ ๋ถํธํฉ๋๋ค.
ํญ์ ๋ค ์ชผ๊ฐ๊ณ , ์ฐ์ ์์์ ๋ฐ๋ผ ๋จผ์ ๊ณ์ฐํ๋๋ฐ, ์ฌ๊ธฐ์ ๊ดํธ๊ฐ ํฌํจ๋๊ณ ...์ด๋ฌ์ฟต ์ ๋ฌ์ฟต
๊ณ์ฐ์ด ๊ท์ฐฎ์ ์ฐ๋ฆฌ๋ ์ปดํจํฐ์๊ฒ ์ด๋ฅผ ๋งก๊ธฐ๋ ค๊ณ ํฉ๋๋ค.
๊ทธ๋ฐ๋ฐ ๋ฐ๋ณต๋๋ ์ผ๋ จ์ ๊ณผ์ ์ ์ํํ๋๋ฐ์ ๋ฅํ ์ปดํจํฐ์๊ฒ, ์ค์ํ๊ธฐ๋ฒ์ ๋๋ฌด ์ด๋ ค์ด ๊ธธ ์
๋๋ค.
์ค์ํ๊ธฐ๋ฒ์ ๊ณ์ฐํ๋ ๋ฐฉ๋ฒ์ ์๋ ค์ฃผ๋๊ฒ๊ณผ ์ฐ๋ฆฌ๊ฐ ์์ ํธ๋ ๊ฒ...๋น์ท๋น์ทํ ๊ฒ ๊ฐ์ต๋๋ค.
๋ง์ฝ ์ฌ์น์ฐ์ฐ์์๋ ๋ถ๊ตฌํ๊ณ , ์์์๋ถํฐ ์ญ์ญ ๊ณ์ฐํ ์ ์๋๋ก ํ ์๋ ์์๊น์?
์ปดํจํฐ๊ฐ ์์์ ์ญ์ญ ์ฝ๊ณ , ์ฐ์ฐ์์ ์ฐ์ ์์ ๋๋ฌธ์ ๋ค์ ์์ผ๋ก ๋์๊ฐ ์ผ์ด ์๋๋ก ํ ์ ์๋ค๋ฉด ์ฐธ ์ข์ํ
๋ฐ์...
๊ทธ๋ฐ ๋น์ ์๊ฒ ๋ฑ์ธ ๋ฌผ๊ฑด, ํ์ ํ๊ธฐ๋ฒ์ ๊ฐ์ง๊ณ ์์ต๋๋ค!
2. ํ์ ํ๊ธฐ๋ฒ: Postfix
1 3.334 4.28 110 7729 - * / +
ํ์ํ๊ธฐ๋ฒ์ ์ญํด๋๋ ํ๊ธฐ๋ฒ๊ณผ ๊ฐ์ ๋ง์
๋๋ค.
์ฐ์ฐ์๋ฅผ ํผ์ฐ์ฐ์ ๋ค์ ์จ ์์์ ํ๊ธฐํฉ๋๋ค. ๊ทธ๋ฐ๋ฐ ์ด๊ฒ ๊ณ์ฐ์ด ๋๋ ์์ธ์ง ๊ถ๊ธํ์ง ์์ผ์ ๊ฐ์?
๊ทธ๋ฐ ๋น์ ์ ์ํด ๊ฐ๋จํ ์์๋ฅผ ๋ค์ด๋ณด๊ฒ ์ต๋๋ค. ์, ๊ณ์ฐ์ ์ํด์๋ ์คํ์ด ํ์ํฉ๋๋ค.
๋จ์ํ๊ณ , ์๋ฆ๋ต์ง ์๋์?
์์ ์์์๋ถํฐ ์ฝ์ด๊ฐ๋ฉฐ ๊ณ์ฐํ๊ณ , ๊ณ์ฐ์ ์ํด ๋ค์ ์์ผ๋ก ๋์๊ฐ๋ ์ผ์ด ์์ต๋๋ค!
์ด๋ฏธ ์ฐ์ ์์๊ฐ ์์ ์ ์ฉ๋์ด ์๊ธฐ ๋๋ฌธ์ด์ง์.
3. ์ฐจ๋๊ธฐ์ง ์๊ณ ๋ฆฌ์ฆ: ์ค์ํ๊ธฐ๋ฒ์์ ํ์ํ๊ธฐ๋ฒ์ผ๋ก ๋ณํ
์ฐจ๋๊ธฐ์ง ์๊ณ ๋ฆฌ์ฆ ์ด๋ผ๋ ์ด๋ฆ์ด ์์ํ์ ๋ถ๋ค์ด ๊ณ์ค๊ฑฐ๋ผ๊ณ ์๊ฐํฉ๋๋ค.
'์ค์ํ๊ธฐ๋ฒ์์ ํ์ํ๊ธฐ๋ฒ ๋ณํ ์๊ณ ๋ฆฌ์ฆ' ์ด ์๊ณ ๋ฆฌ์ฆ ์ด๋ฆ์ด ์๋๊ฒ ๊ฐ์ ์กฐ์ฌํด๋ณด๋, ์ฐจ๋๊ธฐ์ง ์๊ณ ๋ฆฌ์ฆ์ด๋ผ๊ณ ํฉ๋๋ค.
๋ฌด๋ ค ๋ค์ต์คํธ๋ผ ์๊ณ ๋ฆฌ์ฆ์ผ๋ก ์ ๋ช
ํ์ ์ปดํจํฐ ๊ณผํ์ ์๋๊ฑฐ ๋ค์ต์คํธ๋ผ(์์ธ ํ๋ฅด ๋ฐ์ดํฌ์คํธ๋ผ) ๊ป์ ๊ณ ์ํ์
จ๊ตฌ์!
์๊ณ ๋ฆฌ์ฆ์ ๋์ ๊ณผ์ ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- ์
๋ ฅ์ด ์์ง ๋จ์์๋ ๋์
- ์ ๋ ฅ์์ ํ ํฐ์ ์ฝ์ด๋ค์ธ๋ค.
- ๋ง์ฝ ํ ํฐ์ด ์ซ์ ๋๋ ๋ณ์์ผ ๊ฒฝ์ฐ ์ถ๋ ฅ ํ์ ๋ฃ๋๋ค.
- ๋ง์ฝ ํ ํฐ์ด ํจ์์ผ ๊ฒฝ์ฐ ์ฐ์ฐ์ ์คํ์ ํธ์ฌํ๋ค.
- ๋ง์ฝ ํ ํฐ์ด ํจ์ ์ธ์์ ๊ตฌ๋ถ์(์: ์ผํ)์ผ ๊ฒฝ์ฐ
- ์คํ์์ ์ฌ๋ ๊ดํธ '(' ๊ฐ ๋ํ๋ ๋๊น์ง ํํ์ฌ ์ถ๋ ฅ ํ์ ๋ฃ๋๋ค. ๋ง์ฝ ์ฌ๋ ๊ดํธ๊ฐ ๋ํ๋์ง ์์ผ๋ฉด ๊ตฌ๋ถ์์ ์์น๊ฐ ์๋ชป๋์๊ฑฐ๋ ์ฌ๋ ๊ดํธ์ ๋ซ๋ ๊ดํธ๊ฐ ๋ง์ง ์๋ ๊ฒ์ด๋ฏ๋ก ์ค๋ฅ๋ฅผ ์ถ๋ ฅํ๋ค.
- ํ ํฐ์ด ์ฐ์ฐ์ o1์ด๋ผ๋ฉด, ์ฐ์ฐ์ ์คํ์ ๋งจ ์์ ์ฐ์ฐ์๊ฐ ์์ ๋๊น์ง ๋ค์์ ๋ฐ๋ณตํ๋ค
- ๋ง์ฝ ์คํ์ ์ฐ์ฐ์ o2๊ฐ ์๋ค๋ฉด
o1์ด ์ผ์ชฝ ๊ฒฐํฉ ์ฐ์ฐ์์ด๊ณ , ์ฐ์ฐ์ ์ฐ์ ์์๊ฐ o2์ ๊ฐ๊ฑฐ๋ ๊ทธ๋ณด๋ค ๋ฎ์ ๊ฒฝ์ฐ,๋๋ o1์ด ์ค๋ฅธ์ชฝ ๊ฒฐํฉ ์ฐ์ฐ์์ด๊ณ , ์ฐ์ ์์๊ฐ o2๋ณด๋ค ๋ฎ์ ๊ฒฝ์ฐo2๋ฅผ ํํ์ฌ ์ถ๋ ฅ ํ์ ๋ฃ๋๋ค. - ๋ง์ฝ ์คํ์ ์ฐ์ฐ์๊ฐ ์๊ฑฐ๋ o2๊ฐ ์กฐ๊ฑด์ ๋ง์กฑํ์ง ์์ผ๋ฉด o1์ ์ฐ์ฐ์ ์คํ์ ํธ์ฌํ๋ค.
- ๋ง์ฝ ์คํ์ ์ฐ์ฐ์ o2๊ฐ ์๋ค๋ฉด
- ๋ง์ฝ ํ ํฐ์ด ์ฌ๋ ๊ดํธ '(' ์ผ ๊ฒฝ์ฐ ์ฐ์ฐ์ ์คํ์ ํธ์ฌํ๋ค.
- ๋ง์ฝ ํ ํฐ์ด ๋ซ๋ ๊ดํธ ')' ์ผ ๊ฒฝ์ฐ
- ์ฐ์ฐ์ ์คํ์์ ์ฌ๋ ๊ดํธ๊ฐ ๋ํ๋ ๋๊น์ง ์ฐ์ฐ์๋ฅผ ํํ์ฌ ์ถ๋ ฅ ํ์ ๋ฃ๋๋ค.
- ์ฐ์ฐ์ ์คํ์์ ์ฌ๋ ๊ดํธ๊ฐ ๋ํ๋๋ฉด ํํ๋, ์ถ๋ ฅ ํ์๋ ๋ฃ์ง ์๋๋ค.
- ์คํ์ ๋ชจ๋ ํํ ๋๊น์ง ์ฌ๋ ๊ดํธ๋ฅผ ์ฐพ์ง ๋ชปํ๋ค๋ฉด ๊ดํธ๊ฐ ๋ง์ง ์๋ ๊ฒ์ด๋ฏ๋ก ์ค๋ฅ๋ฅผ ์ถ๋ ฅํ๋ค.
- ์ฌ๋ ๊ดํธ๋ฅผ ํํ ํ ์คํ ๋งจ ์์ ํจ์ ํ ํฐ์ด ๋จ์์๋ค๋ฉด ์ถ๋ ฅ ํ์ ๋ฃ๋๋ค.
- ๋์ด์ ์
๋ ฅ ํ ํฐ์ด ๋จ์์์ง ์๋ค๋ฉด
- ์ฐ์ฐ์ ์คํ์ด ๋น ๋๊น์ง ํ ํฐ์ ํํ๋ค.
- ๋ง์ฝ ์คํ์ ์ฌ๋ ๊ดํธ๋ ๋ซ๋ ๊ดํธ๊ฐ ๋จ์์๋ค๋ฉด ๊ดํธ๊ฐ ๋ง์ง ์๋ ๊ฒ์ด๋ฏ๋ก ์ค๋ฅ๋ฅผ ์ถ๋ ฅํ๋ค.
- ๊ทธ ์ธ์ ์ฐ์ฐ์๋ ์ถ๋ ฅ ํ์ ๋ฃ๋๋ค.
- ์ ๋ ฅ๊ณผ ์ฐ์ฐ์ ์คํ์ด ๋ชจ๋ ๋น์๋ค๋ฉด ์๊ณ ๋ฆฌ์ฆ์ ์ข ๋ฃํ๋ค.
๋งค์ฐ ๊ธธ๊ตฐ์. ์ด๋ฅผ ์ค์ํ๊ธฐ๋ฒ ๋ณํ ์๊ณ ๋ฆฌ์ฆ์ ๋งฅ๋ฝ์ผ๋ก ๊ฐ๋จํ๊ฒ ์ค์ฌ๋ณธ ๋์๊ณผ์ ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- ์ ๋ ฅ๋ฐ์ ์ค์ํ๊ธฐ์์์ ํ ํฐ์ ์ฝ๋๋ค.
- ํ ํฐ์ด ํผ์ฐ์ฐ์์ด๋ฉด ํ ํฐ์ ๊ฒฐ๊ณผ์ ์ถ๋ ฅํ๋ค
- ํ ํฐ์ด ์ฐ์ฐ์(๊ดํธํฌํจ)์ธ ๊ฒฝ์ฐ, ์คํ์ ์ต์์ ๋
ธ๋์ ๋ด๊ฒจ์๋ ์ฐ์ฐ์๊ฐ ํ ํฐ๋ณด๋ค ์ฐ์ ์์๊ฐ ๋์์ง ๊ฒ์ฌํ๋ค.
๊ฒ์ฌ ๊ฒฐ๊ณผ๊ฐ ์ฐธ์ด๋ฉด, ์ต์์ ๋ ธ๋๋ฅผ ์คํ์์ ๊บผ๋ด ๊ฒฐ๊ณผ์ ์ถ๋ ฅํ๋ฉฐ, ์ด ๊ฒ์ฌ ์์ ์ ๋ฐ๋ณตํด์ ์ํํ๋ ๊ทธ ๊ฒฐ๊ณผ๊ฐ ๊ฑฐ์ง์ด๊ฑฐ๋ ์คํ์ด ๋น๊ฒ ๋๋ฉด ์์ ์ ์ค๋จํ๋ค.
๊ฒ์ฌ ์์ ์ด ๋๋ ํ์๋ ํ ํฐ์ ์คํ์ ์ฝ์ ํ๋ค. - ํ ํฐ์ด ์ค๋ฅธ์ชฝ ๊ดํธ ')'์ด๋ฉด ์ต์์ ๋
ธ๋์ ์ผ์ชฝ ๊ดํธ '('๊ฐ ์ฌ ๋๊น์ง ์คํ์ ์ ๊ฑฐ ์ฐ์ฐ์ ์ํํ๊ณ , ์ ๊ฑฐํ ๋
ธ๋์ ๋ด๊ธด ์ฐ์ฐ์๋ฅผ ์ถ๋ ฅํ๋ค.
์ผ์ชฝ ๊ดํธ๋ฅผ ๋ง๋๋ฉด ์ ๊ฑฐ๋ง ํ๊ณ ์ถ๋ ฅํ์ง ์๋๋ค. - ์ค์ ํ๊ธฐ์์ ๋ ์ฝ์ ๊ฒ์ด ์๋ค๋ฉด ๋น ์ ธ๋๊ฐ๊ณ , ๋ ์ฝ์๊ฒ์ด ์๋ค๋ฉด 1๋ถํฐ ๋ค์ ๋ฐ๋ณตํ๋ค.
(*์ถ์ฒ - ์ฑ '๋๋ฅผ ์๊ทนํ๋ ์๊ณ ๋ฆฌ์ฆ')
Swift ์ฝ๋๋ก ๊ตฌํํ ๊ฒฐ๊ณผ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
struct Postfix{
static func getPostfix(Infix: String)->String?{
let infix = Infix.components(separatedBy: [" "]).joined()
var stack = Stack<Character>()
var postfix = String()
for element in infix{
if element.isNumber || element == "."{
postfix.append(element)
}else{
if postfix.last != " " { postfix.append(" ") }
if element == ")"{
while(stack.isEmpty == false){
if stack.top! == "(" {
_ = stack.pop()!
break
}
postfix.append(stack.pop()!)
}
}else{
while(stack.isEmpty == false){
//์คํ ์์ ๋จ์์๋ ์ฐ์ฐ์๊ฐ ์์ ๋ณด๋ค ๋์ผ๋ฉด ์๋จ
//์ฆ, ์คํ top๊ณผ ํ์ฌ op๋ฅผ ๋น๊ตํ์ฌ, top์ด ๋์ง ์์ผ๋ฉด break
if stack.top!.isPrior(Op: element) == false {break}
if element != "(" {
postfix.append(stack.pop()!)
}
}
stack.push(element)
}
}
}
while(stack.isEmpty == false){
if postfix.last != " " { postfix.append(" ") }
postfix.append(stack.pop()!)
}
return postfix
}
}
extension Character{
func isPrior(Op:Character)->Bool{
//์ฐ์ ์์์ด๋ฏ๋ก ๋ถ๋ฑํธ์ ๋ฐฉํฅ์ ๋ฐ๋
return self.priority(inStack: true) <= Op.priority(inStack: false)
}
func priority(inStack:Bool)->Int{
enum priority:Character{
case LEFT_PARENT = "("
case RIGHT_PARENT = ")"
case PLUS = "+"
case MINUS = "-"
case MULTIPLY = "*"
case DEVIDE = "/"
}
switch priority(rawValue: self){
case .LEFT_PARENT:
return inStack ? 3 : 0
case .MULTIPLY,.DEVIDE:
return 1
case .PLUS,.MINUS:
return 2
default:
return 987654321
}
}
}
ํด๋น ์๊ณ ๋ฆฌ์ฆ์ผ๋ก ํธ๋ ๋ฐฑ์ค๋ฌธ์ ๋ก ์ฐ์ตํด๋ณด๋๊ฒ๋ ๊ด์ฐฎ์ ๋ฐฉ๋ฒ์
๋๋ค!
4. ๋ง๋ฌด๋ฆฌ
๊ตฌํํ๋ฉด์ ์ฐธ ์ฆ๊ฑฐ์ ๋ ์๊ณ ๋ฆฌ์ฆ ์
๋๋ค.
Swift์ extension๊ณผ enum, if์ switch, while์ด ์กฐํ๋กญ๊ฒ ๋ค์ด๊ฐ๋ ์๋ฆ๋ค์์ ๋๋ ์ ์์์ง์.
๋์ผ๋ก๋ง ๋ณด์ง ๋ง๊ณ , ์ง์ ๊ตฌํํด๋ณด๋ฉฐ Swift์ ์๊ณ ๋ฆฌ์ฆ์ ์ ์ ๋ถ์ฌ๋ณด์๊ธธ ๋ฐ๋๋๋ค.
๊ทธ๋ผ ๋ค์ ํฌ์คํ
์์ ๋ง๋์!
'learnings > Algorithm&DS' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[DataStructure] ํ 1๋ถ (1) | 2024.05.01 |
---|---|
[DataStructure] ์คํ (1) | 2024.05.01 |
[DataStructure] ํํ ๋งํฌ๋ ๋ฆฌ์คํธ๋ฅผ Swift๋ก ๊ตฌํํ๊ธฐ (0) | 2024.03.26 |
[DataStructure] ์ด์ค ๋งํฌ๋ ๋ฆฌ์คํธ๋ฅผ Swift๋ก ๊ตฌํํ๊ธฐ (0) | 2024.03.25 |
[DataStructure] ๋งํฌ๋ ๋ฆฌ์คํธ๋ฅผ Swift๋ก ๊ตฌํํ๊ธฐ (0) | 2024.03.20 |