let's get IT with DAVINA ๐ป
[์๋ฃ๊ตฌ์กฐ/์ ํ๊ตฌ์กฐ]์คํ ๋ณธ๋ฌธ
Stack ์ด๋?
Definition
- ์๋ค, ์์ด๋ค, ํฌ๊ฐ์ง๋ค → ๋ฐ์ดํฐ๋ฅผ ์์๋๋ก ์๋ ์๋ฃ๊ตฌ์กฐ
๊ฐ์ฅ ๋จผ์ ๋ค์ด๊ฐ ์๋์ฐจ๋ ๊ฐ์ฅ ๋์ค์ ๋์ฌ ์ ์๊ณ ,
๊ฐ์ฅ ๋์ค์ ๋ค์ด๊ฐ ์๋์ฐจ๊ฐ ๊ฐ์ฅ ๋จผ์ ๋์ฌ ์ ์๋ค.
- ์๋ฃ๊ตฌ์กฐ Stack์ ํน์ง์ ์ ๋ ฅ๊ณผ ์ถ๋ ฅ์ด ํ๋์ ๋ฐฉํฅ์ผ๋ก ์ด๋ฃจ์ด์ง๋ ์ ํ์ ์ ๊ทผ์ ์๋ค.
- ์ด๋ฐ Stack ์๋ฃ๊ตฌ์กฐ ์ ์ฑ ์ LIFO(Last In First Out) / FILO (First In Last Out)์ด๋ผ ๋ถ๋ฅธ๋ค.
- Stack์ ๋ฐ์ดํฐ๋ฅผ ๋ฃ๋ ๊ฒ์ ‘PUSH’, ๋ฐ์ดํฐ๋ฅผ ๊บผ๋ด๋ ๊ฒ์ ‘POP’์ด๋ผ๊ณ ํ๋ค.
์คํ์ ์ฑ์ง
- ์์์ ์ถ๊ฐ → O(1)
- ์์์ ์ ๊ฑฐ → O(1)
- ์ ์ผ ์๋จ์ ์์ ํ์ธ → O(1)
- ์ ์ผ ์๋จ์ด ์๋ ๋๋จธ์ง ์์๋ค์ ํ์ธ/๋ณ๊ฒฝ์ด ์์น์ ์ผ๋ก ๋ถ๊ฐ๋ฅ
๊ตฌํ
const int MX=1000005;
int dat[mx];
int pos=0;
Stack์ ํน์ง
- LIFO(Last In First Out)
- ๋จผ์ ๋ค์ด๊ฐ ๋ฐ์ดํฐ๋ ์ ์ผ ๋์ค์ ๋์ค๋ ํ์ ์ ์ถ์ ๊ตฌ์กฐ
์1) 1, 2, 3, 4๋ฅผ ์คํ์ ์ฐจ๋ก๋๋ก ๋ฃ์ต๋๋ค.
stack.push(๋ฐ์ดํฐ)
---------------------------
1 <- 2 <- 3 <- 4
---------------------------
๋ค์ด๊ฐ ์์๋๋ก, 1๋ฒ์ด ์ ์ผ ๋จผ์ ๋ค์ด๊ฐ๊ณ 4๋ฒ์ด ๋ง์ง๋ง์ผ๋ก ๋ค์ด๊ฐ๊ฒ ๋ฉ๋๋ค.
์2) ์คํ์ด ๋น ๋๊น์ง ๋ฐ์ดํฐ๋ฅผ ์ ๋ถ ๋นผ๋
๋๋ค.
stack.pop()
---------------------------
---------------------------
4, 3, 2, 1
์ ์ผ ๋ง์ง๋ง์ ์๋ ๋ฐ์ดํฐ๋ถํฐ ์ฐจ๋ก๋๋ก ๋์ค๊ฒ ๋ฉ๋๋ค.
- ๋ฐ์ดํฐ๋ ํ๋์ฉ ๋ฃ๊ณ ๋บ ์ ์๋ค.
- Stack ์๋ฃ๊ตฌ์กฐ๋ ๋ฐ์ดํฐ๊ฐ ์๋ฌด๋ฆฌ ๋ง์ด ์์ด๋ ํ๋์ฉ ๋ฐ์ดํฐ๋ฅผ ๋ฃ๊ณ & ๋บ๋๋ค.
- ํ๊บผ๋ฒ์ ์ฌ๋ฌ๊ฐ๋ฅผ ๋ฃ๊ฑฐ๋ ๋บ ์ ์์ต๋๋ค.
- ํ๋์ ์
์ถ๋ ฅ ๋ฐฉํฅ์ ๊ฐ์ง๊ณ ์์ต๋๋ค.
- Stack ์๋ฃ๊ตฌ์กฐ๋ ๋ฐ์ดํฐ์ ์ ์ถ๋ ฅ ๋ฐฉํฅ์ด ๊ฐ์ต๋๋ค.
- ๋ง์ฝ, ์ ์ถ๋ ฅ ๋ฐฉํฅ์ด ์ฌ๋ฌ ๊ฐ๋ผ๋ฉด Stack ์๋ฃ๊ตฌ์กฐ๋ผ๊ณ ๋ณผ ์ ์์ต๋๋ค.
- ์ ์ฅ๋๋ ๋ฐ์ดํฐ๋ ์ ํํ๊ณ ์ ์ ์ด์ด์ผ ํฉ๋๋ค.
- ์ ์ฅ๋ ๋ฐ์ดํฐ๊ฐ ์ ์ ํน์ฑ์ ๊ฐ์ ธ์ผ์ง๋ง์ด ์ปดํ์ผ ์๊ฐ์ด ๊ฒฐ์ ๋ฉ๋๋ค.
- ์คํ์ ์ ์ฅ๋๋ ์ผ๋ฐ์ ์ธ ๋ฐ์ดํฐ๋ ๋ก์ปฌ ๋ณ์(value type or primitive, primitive ์์), ํฌ์ธํฐ ๋ฐ ํจ์ ํ๋ ์์ ๋๋ค.
- ์คํ์ ํฌ๊ธฐ๋ ์ ํ๋์ด ์์ต๋๋ค.
- ํ(heap)์ ๋นํด ์คํ์ ํฌ๊ธฐ๊ฐ ์ ํ๋์ด ์์ผ๋ฏ๋ก, ์คํ ์ค๋ฒํ๋ก(Stack Overflow) ๊ฐ์ ์๋ฌ๊ฐ ์์ฃผ ๋ฐ์ํ๋ค.
- ๋๋ถ๋ถ์ ์ธ์ด๋ ์คํ์ ์ ์ฅํ ์ ์๋ ๊ฐ์ ํฌ๊ธฐ๊ฐ ์ ํ๋์ด ์์ต๋๋ค.
Stack์ ์ค์ฌ์ฉ ์์
๋ธ๋ผ์ฐ์ ์ ๋ค๋ก๊ฐ๊ธฐ, ์์ผ๋ก ๊ฐ๊ธฐ ๊ธฐ๋ฅ ๊ตฌํ ์
1. ์๋ก์ด ํ์ด์ง๋ก ์ ์ํ ๋, ํ์ฌ ํ์ด์ง๋ฅผ Prev Stack์ ๋ณด๊ดํฉ๋๋ค.
2. ๋ค๋ก๊ฐ๊ธฐ ๋ฒํผ์ ๋๋ฌ ์ด์ ํ์ด์ง๋ก ๋์๊ฐ ๋, ํ์ฌ ํ์ด์ง๋ฅผ Next Stack์ ๋ณด๊ดํ๊ณ , Prev Stack์ ๊ฐ์ฅ ๋์ค์ ๋ณด๊ด๋ ํ์ด์ง๋ฅผ ํ์ฌ ํ์ด์ง๋ก ๊ฐ์ ธ์ต๋๋ค.
3. ์์ผ๋ก๊ฐ๊ธฐ ๋ฒํผ์ ๋๋ฌ ์์ ๋ฐฉ๋ฌธํ ํ์ด์ง๋ก ์ด๋์ ์ํ ๋๋, Next Stack์ ๊ฐ์ฅ ๋ง์ง๋ง์ผ๋ก ๋ณด๊ด๋ ํ์ด์ง๋ฅผ ๊ฐ์ ธ์ต๋๋ค.
4. ๋ง์ง๋ง์ผ๋ก ํ์ฌ ํ์ด์ง๋ฅผ Prev Stack์ ๋ณด๊ดํฉ๋๋ค.
Using Stack as JavaScript Array
// const array = new Array() ๋ฏธ๋ฆฌ ์ ์๋ Array ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํฉ๋๋ค.
const stack = [];
stack.push(1); // [1]
stack.push(2); // [1, 2]
stack.push(3); // [1, 2, 3]
stack.push(4); // [1, 2, 3, 4]
stack.push(5); // [1, 2, 3, 4, 5]
console.log(stack); // [1, 2, 3, 4, 5]
stack.pop(); // [1, 2, 3, 4]
stack.pop(); // [1, 2, 3]
console.log(stack); // [1, 2, 3]
์คํ์ ํ์ฉ (์์์ ๊ดํธ ์)
๋ฌธ์์ด์ ์์์๋ถํฐ ์ฝ์ด๋๊ฐ ๋, ๋ซ๋ ๊ดํธ๋ ๋จ์์๋ ๊ดํธ ์ค์์ ๊ฐ์ฅ ์ต๊ทผ์ ๋ค์ด์จ ์ฌ๋ ๊ดํธ์ ์ง์ ์ง์ด ์์ ๋ฒ๋ฆฌ๋ ๋ช ๋ น
๐ก ๋ฌธ์ ํด๊ฒฐ ๋ฐฉ๋ฒ
1. ์ฌ๋ ๊ดํธ๊ฐ ๋์ค๋ฉด ์คํ์ ์ถ๊ฐ
2. ๋ซ๋ ๊ดํธ๊ฐ ๋์์ ๊ฒฝ์ฐ,
2-1. ์คํ์ด ๋น์ด์์ผ๋ฉด ์ฌ๋ฐ๋ฅด์ง ์์ ๊ดํธ ์
2-2. ์คํ์ top์ด ์ง์ด ๋ง์ง ์๋ ๊ดํธ์ผ ๊ฒฝ์ฐ ์ฌ๋ฐ๋ฅด์ง ์์ ๊ดํธ ์
2-3. ์คํ์ top์ด ์ง์ด ๋ง๋ ๊ดํธ์ผ ๊ฒฝ์ฐ pop
3. ๋ชจ๋ ๊ณผ์ ์ ๋๋ธ ํ ์คํ์ ๊ดํธ๊ฐ ๋จ์์์ผ๋ฉด ์ฌ๋ฐ๋ฅด์ง ์์ ๊ดํธ ์, ๋จ์์์ง ์์ผ๋ฉด ์ฌ๋ฐ๋ฅธ ๊ดํธ ์
'DEV_IN > Algorithm' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
์๊ณ ๋ฆฌ์ฆ์ด๋? (2) | 2023.02.24 |
---|---|
์๋ฃ๊ตฌ์กฐ/๋น์ ํ๊ตฌ์กฐ/๊ทธ๋ํ (2) | 2023.02.23 |
์๋ฃ๊ตฌ์กฐ/๋น์ ํ๊ตฌ์กฐ/ํธ๋ฆฌ (0) | 2023.02.23 |
[์๋ฃ๊ตฌ์กฐ/์ ํ๊ตฌ์กฐ]ํ (2) | 2023.02.22 |
์๋ฃ๊ตฌ์กฐ๋? (0) | 2023.02.22 |
Comments