ALGORITHM_STACK ( ์คํ )
๐ ALGORITHM
๐ STACK
์คํ์ด๋ ๋ฌด์์ธ๊ฐ ?
๋ฌผ๊ฑด์ ์์ ์ฌ๋ฆฌ๋ฏ ์๋ฃ๋ฅผ ์์ ์ฌ๋ฆฐ ํํ์ ์๋ฃ๊ตฌ์กฐ์ด๋ค.
ํ์
์ ์ถ ๊ตฌ์กฐ ( Last In First Out )
๋ง์ง๋ง์ ์ฝ์
ํ ์๋ฃ๋ฅผ ๊ฐ์ฅ ๋จผ์ ๊บผ๋ธ๋ค
์คํ์ ์๋ฃ๋ฅผ ์ฝ์
ํ๊ฑฐ๋ ์คํ์์ ์๋ฃ๋ฅผ ๊บผ๋ผ ์ ์๋ค.
์คํ์ ์ ์ฅ๋ ์๋ฃ๋ ์ ํ ๊ตฌ์กฐ๋ฅผ ๊ฐ๋๋ค
์คํ์ ์ฐ๊ฒฐ๋ฆฌ์คํธ๋ก ๊ตฌํํ ์ ์๋ค.
์คํ์ ๋ฐฐ์ด๊ณผ ๋ฌ๋ฆฌ i๋ฒ์งธ ํญ๋ชฉ์ ์ ๊ทผํ ์ ์๋ค
์คํ์ ๋ฐฐ์ด์ฒ๋ผ ์์๋ฅผ ํ๋์ฉ ์์ผ๋ก ๋ฐ์ด ์ค ํ์๊ฐ ์๋ค
์คํ์ ๋ฐ์ดํฐ๋ฅผ ์ถ๊ฐ, ์ญ์ ํ๋ ์๊ฐ์ด ๋น ๋ฅด๋ค
- ์ ํ ๊ตฌ์กฐ : ์๋ฃ ๊ฐ์ ๊ด๊ณ๊ฐ 1:1 ๊ด๊ณ๋ฅผ ๊ฐ๋๋ค
- ๋น์ ํ ๊ตฌ์กฐ : ์๋ฃ ๊ฐ์ ๊ด๊ณ๊ฐ 1:N ๊ด๊ณ๋ฅผ ๊ฐ๋๋ค (ํธ๋ฆฌ)
์ฃผ์ ๋ฉ์๋
- push(item) : item์ STACK์ ์ ์ฅํ๋ค ( ์ฝ์ )
- pop() : STACK์์ ์๋ฃ๋ฅผ ๊บผ๋ธ๋ค ( ์ญ์ )
์ฝ์ ํ ์๋ฃ์ ์ญ์์ผ๋ก ๊บผ๋ธ๋ค - peek() : STACK์ TOP์ ์๋ ์์๋ฅผ ๋ฐํํ๋ค ( ๊บผ๋ด๋๊ฑฐ ์๋ )
- inEmpty() : STACK์ด ๋น์ด์์ผ๋ฉด True, ์ ๋น์ด์์ผ๋ฉด False
- size() : STACK์ ์ฌ์ด์ฆ๋ฅผ ์ถ๋ ฅํด์ค๋ค
- clear() : STACK์ ๋ชจ๋ ์๋ฃ๋ค์ ์ญ์ ํ๋ค
- display() : STACK ๋ด์ ๋ชจ๋ ์์ ์ถ๋ ฅ
์คํ์ ์ฌ์ฉ
์ฌ๊ท ์๊ณ ๋ฆฌ์ฆ
์น ๋ธ๋ผ์ฐ์ ๋ฐฉ๋ฌธ๊ธฐ๋ก
์คํ ์ทจ์ ( undo )
์ญ์ ๋ฌธ์์ด ๋ง๋ค๊ธฐ
- ๊ดํธ์ ์ง์ ๋ฐฐ์ด์ ์ ์ฅ
- โ(โ ์ ๋ง๋๋ฉด push
- โ)โ ์ ๋ง๋๋ฉด ์ง ํ์ธํ๊ณ ๋ง์ผ๋ฉด pop
์ค์ ํ๊ธฐ๋ฒ์ ํ์ ํ๊ธฐ๋ฒ์ผ๋ก ๋ฐ๊พผ ํ ํ์ ํ๊ธฐ๋ฒ์ ๊ณ์ฐํ๋ค
- ์ค์ ํ๊ธฐ๋ฒ -> ํ๊ธฐ ํ๊ธฐ๋ฒ
์ฐ์ฐ์ ์ฐ์ ์์๋ ์ซ์๋ก ํํํด ๋๋๋ค.
- ์คํ์ด ๋น์ด์์ผ๋ฉด push
- ์คํ์ด ์ ๋น์ด์์ผ๋ฉด ์ ๋ ฅ์ฐ์ฐ์ STACK์ TOP ์ฐ์ฐ์ ๋น๊ต
- TOP์ด ๋ ํฐ ๊ฒฝ์ฐ TOP์ pop ํ๊ณ ์ ๋ ฅ๊ฐ์ push ํด์ค๋ค. ๊ทธ๋ฆฌ๊ณ TOP ๊ฐ์ ๋ค์ push ํด์ค๋ค.
- ์ ๋ ฅ๊ฐ์ด ๋ ํฐ ๊ฒฝ์ฐ ๊ทธ๋ฅ push ํ๋ค.
- ํ์ ํ๊ธฐ๋ฒ ๊ณ์ฐ
- ์ ๋ ฅ์ด ์ซ์์ธ ๊ฒฝ์ฐ push
- ์ ๋ ฅ์ด ์ฐ์ฐ์์ด๋ฉด 2๊ฐ๋ฅผ pop ํด์ ๊ณ์ฐ ํด์ฃผ๊ณ ๊ทธ ๊ฒฐ๊ณผ๊ฐ์ push
- ๋ง์ง๋ง์ ๋จ์ ์๊ฐ ๊ณ์ฐ ๊ฒฐ๊ณผ
Function call
ํ๋ก๊ทธ๋จ์์์ ํจ์ ํธ์ถ๊ณผ ๋ณต๊ท์ ๋ฐ๋ฅธ ์ํ ์์๋ฅผ ๊ด๋ฆฌํ๋ค
- ํจ์ ํธ์ถ์ด ๋ฐ์ํ๋ฉด ์ ๋ณด๋ฅผ ์คํ ํ๋ ์์ ์ ์ฅํ์ฌ ์์คํ ์คํ์ ์ฝ์
- ํจ์์ ์คํ์ด ๋๋๋ฉด ์์คํ ์คํ์ top ์์๋ฅผ popํ๋ฉด์ ํ๋ ์์ ์ ์ฅ๋์ด ์๋ ๋ณต๊ท์ฃผ์๋ฅผ ํ์ธํ๊ณ ๋ณต๊ท
- ์ด ๊ณผ์ ์ ๋ฐ๋ณตํ์ฌ ์ ์ฒด ํ๋ก๊ทธ๋จ ์ํ์ด ์ข ๋ฃ๋๋ฉด ์์คํ ์คํ์ ๊ณต๋ฐฑ ์คํ์ด ๋๋ค
๐ ์ฐธ์กฐ
https://gmlwjd9405.github.io/2018/08/03/data-structure-stack.html/a>