let's get IT with DAVINA ๐Ÿ’ป

[์ž๋ฃŒ๊ตฌ์กฐ/์„ ํ˜•๊ตฌ์กฐ]์Šคํƒ ๋ณธ๋ฌธ

DEV_IN/Algorithm

[์ž๋ฃŒ๊ตฌ์กฐ/์„ ํ˜•๊ตฌ์กฐ]์Šคํƒ

๋‹ค๋นˆ์น˜์ฝ”๋“œ๐Ÿ’Ž 2023. 2. 22. 21:29

Stack ์ด๋ž€?

Definition 

  • ์Œ“๋‹ค, ์Œ“์ด๋‹ค, ํฌ๊ฐœ์ง€๋‹ค → ๋ฐ์ดํ„ฐ๋ฅผ ์ˆœ์„œ๋Œ€๋กœ ์Œ“๋Š” ์ž๋ฃŒ๊ตฌ์กฐ
๊ณจ๋ชฉ์€ ์ž๋ฃŒ๊ตฌ์กฐ Stack / ์ž๋™์ฐจ๋Š” ๋ฐ์ดํ„ฐ(Data)
๊ฐ€์žฅ ๋จผ์ € ๋“ค์–ด๊ฐ„ ์ž๋™์ฐจ๋Š” ๊ฐ€์žฅ ๋‚˜์ค‘์— ๋‚˜์˜ฌ ์ˆ˜ ์žˆ๊ณ , 
๊ฐ€์žฅ ๋‚˜์ค‘์— ๋“ค์–ด๊ฐ„ ์ž๋™์ฐจ๊ฐ€ ๊ฐ€์žฅ ๋จผ์ € ๋‚˜์˜ฌ ์ˆ˜ ์žˆ๋‹ค.
  • ์ž๋ฃŒ๊ตฌ์กฐ Stack์˜ ํŠน์ง•์€ ์ž…๋ ฅ๊ณผ ์ถœ๋ ฅ์ด ํ•˜๋‚˜์˜ ๋ฐฉํ–ฅ์œผ๋กœ ์ด๋ฃจ์–ด์ง€๋Š” ์ œํ•œ์  ์ ‘๊ทผ์— ์žˆ๋‹ค. 
  • ์ด๋Ÿฐ Stack ์ž๋ฃŒ๊ตฌ์กฐ ์ •์ฑ…์„ LIFO(Last In First Out) / FILO (First In Last Out)์ด๋ผ ๋ถ€๋ฅธ๋‹ค.
  • Stack์— ๋ฐ์ดํ„ฐ๋ฅผ ๋„ฃ๋Š” ๊ฒƒ์„ ‘PUSH’, ๋ฐ์ดํ„ฐ๋ฅผ ๊บผ๋‚ด๋Š” ๊ฒƒ์„ ‘POP’์ด๋ผ๊ณ  ํ•œ๋‹ค.

์Šคํƒ์˜ ์„ฑ์งˆ

  1. ์›์†Œ์˜ ์ถ”๊ฐ€ → O(1)
  2. ์›์†Œ์˜ ์ œ๊ฑฐ → O(1)
  3. ์ œ์ผ ์ƒ๋‹จ์˜ ์›์†Œ ํ™•์ธ → O(1)
  4. ์ œ์ผ ์ƒ๋‹จ์ด ์•„๋‹Œ ๋‚˜๋จธ์ง€ ์›์†Œ๋“ค์˜ ํ™•์ธ/๋ณ€๊ฒฝ์ด ์›์น™์ ์œผ๋กœ ๋ถˆ๊ฐ€๋Šฅ

๊ตฌํ˜„

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. ๋ชจ๋“  ๊ณผ์ •์„ ๋๋‚ธ ํ›„ ์Šคํƒ์— ๊ด„ํ˜ธ๊ฐ€ ๋‚จ์•„์žˆ์œผ๋ฉด ์˜ฌ๋ฐ”๋ฅด์ง€ ์•Š์€ ๊ด„ํ˜ธ ์Œ, ๋‚จ์•„์žˆ์ง€ ์•Š์œผ๋ฉด ์˜ฌ๋ฐ”๋ฅธ ๊ด„ํ˜ธ ์Œ
Comments