λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°

Tech/Data Structure & Algorithm

πŸ“š 자료ꡬ쑰 (μŠ€νƒ / 큐)

πŸ“ŒμŠ€νƒ(Stack)

μŠ€νƒ(stack)μ΄λž€ μŒ“μ•„ μ˜¬λ¦°λ‹€λŠ” 것을 μ˜λ―Έν•©λ‹ˆλ‹€.
λ”°λΌμ„œ μŠ€νƒ μžλ£Œκ΅¬μ‘°λΌλŠ” 것은 책을 μŒ“λŠ” κ²ƒμ²˜λŸΌ 차곑차곑 μŒ“μ•„ 올린 ν˜•νƒœμ˜ 자료ꡬ쑰λ₯Ό λ§ν•©λ‹ˆλ‹€.
λŒ€ν‘œμ μΈ λ‚΄μž₯ν•¨μˆ˜ : push, peek, pop 이 μžˆμŠ΅λ‹ˆλ‹€.

πŸ“Œ μŠ€νƒμ˜ ꡬ쑰 및 νŠΉμ§•

μŠ€νƒ
pushλŠ” μƒˆλ‘­κ²Œ 데이터λ₯Ό λ„£λŠ” 것을 μ˜λ―Έν•©λ‹ˆλ‹€.
peek은 κ°€μž₯ λ§ˆμ§€λ§‰μ— λ“€μ–΄κ°„ 데이터λ₯Ό ν™•μΈν•˜λŠ” 것을 μ˜λ―Έν•©λ‹ˆλ‹€.
pop은 κ°€μž₯ λ§ˆμ§€λ§‰μ— λ“€μ–΄κ°„ 데이터λ₯Ό μΆ”μΆœν•˜λŠ” 것을 μ˜λ―Έν•©λ‹ˆλ‹€.
λ”°λΌμ„œ μŠ€νƒμ€ μ‹œκ°„ μˆœμ„œμ— 따라 μžλ£Œκ°€ μŒ“μ—¬μ„œ κ°€μž₯ λ§ˆμ§€λ§‰μ— μ‚½μž…λœ μžλ£Œκ°€ κ°€μž₯ λ¨Όμ € μ‚­μ œλœλ‹€λŠ”
ꡬ쑰적 νŠΉμ§•μ„ κ°€μ§€κ²Œ λ©λ‹ˆλ‹€.
μ΄λŸ¬ν•œ μŠ€νƒμ˜ ꡬ쑰λ₯Ό ν›„μž…μ„ μΆœ(LIFO, Last-In-First-Out) ꡬ쑰라고 λ§ν•©λ‹ˆλ‹€.

πŸ“Œ μŠ€νƒμ˜ μž₯단점

top 을 톡해 μ ‘κ·Όν•˜κΈ° λ•Œλ¬Έμ— 데이터 μ ‘κ·Ό, μ‚½μž…, μ‚­μ œκ°€ λΉ λ¦…λ‹ˆλ‹€.
top μœ„μΉ˜ μ΄μ™Έμ˜ 데이터에 μ ‘κ·Όν•  수 μ—†κΈ° λ•Œλ¬Έμ— 탐색이 λΆˆκ°€λŠ₯ν•˜λ‹€. νƒμƒ‰ν•˜λ €λ©΄ λͺ¨λ“  데이터λ₯Ό κΊΌλ‚΄λ©΄μ„œ μ§„ν–‰ν•΄μ•Ό ν•©λ‹ˆλ‹€.

πŸ“Œ μŠ€νƒμ˜ ν™œμš© μ˜ˆμ‹œ

μŠ€νƒμ˜ νŠΉμ§•μΈ ν›„μž…μ„ μΆœ(LIFO)을 ν™œμš©ν•˜μ—¬ μ—¬λŸ¬ λΆ„μ•Όμ—μ„œ ν™œμš© κ°€λŠ₯ν•˜λ‹€.

  • μ›Ή λΈŒλΌμš°μ € 방문기둝 (λ’€λ‘œ κ°€κΈ°) : κ°€μž₯ λ‚˜μ€‘μ— μ—΄λ¦° νŽ˜μ΄μ§€λΆ€ν„° λ‹€μ‹œ 보여쀀닀.
  • μ‹€ν–‰ μ·¨μ†Œ (undo) : κ°€μž₯ λ‚˜μ€‘μ— μ‹€ν–‰λœ 것뢀터 싀행을 μ·¨μ†Œν•œλ‹€.
  • μˆ˜μ‹μ˜ κ΄„ν˜Έ 검사 (μ—°μ‚°μž μš°μ„ μˆœμœ„ ν‘œν˜„μ„ μœ„ν•œ κ΄„ν˜Έ 검사)
  • μž¬κ·€ μ•Œκ³ λ¦¬μ¦˜
  • DFS μ•Œκ³ λ¦¬μ¦˜
  • κ΄„ν˜Έ 검사, ν›„μœ„ 연산법, λ¬Έμžμ—΄ μ—­μˆœ 좜λ ₯ λ“±

πŸ“Œ 큐(Queue)

Queue 의 사전적 μ˜λ―ΈλŠ” 1. (무엇을 κΈ°λ‹€λ¦¬λŠ” μ‚¬λžŒ, μžλ™μ°¨ λ“±μ˜) 쀄 , ν˜Ήμ€ 쀄을 μ„œμ„œ κΈ°λ‹€λ¦¬λŠ” 것을 μ˜λ―Έν•©λ‹ˆλ‹€.
λ”°λΌμ„œ μΌμƒμƒν™œμ—μ„œ λ†€μ΄λ™μ‚°μ—μ„œ 쀄을 μ„œμ„œ κΈ°λ‹€λ¦¬λŠ” 것, μ€ν–‰μ—μ„œ λ¨Όμ € 온 μ‚¬λžŒμ˜ 업무λ₯Ό μ°½κ΅¬μ—μ„œ μ²˜λ¦¬ν•˜λŠ” 것과 κ°™μŠ΅λ‹ˆλ‹€.
μ„ μž…μ„ μΆœ(FIFO, First in first out) λ°©μ‹μ˜ ꡬ쑰라고 λ§ν•©λ‹ˆλ‹€.
λŒ€ν‘œμ μΈ λ‚΄μž₯ν•¨μˆ˜ : put, peek, get

πŸ“Œ 큐의 ꡬ쑰 및 νŠΉμ§•

큐
putλŠ” μƒˆλ‘­κ²Œ 데이터λ₯Ό λ„£λŠ” 것을 μ˜λ―Έν•©λ‹ˆλ‹€.
peek은 κ°€μž₯ μ²˜μŒμ— λ“€μ–΄κ°„ 데이터λ₯Ό ν™•μΈν•˜λŠ” 것을 μ˜λ―Έν•©λ‹ˆλ‹€.
get은 κ°€μž₯ μ²˜μŒμ— λ“€μ–΄κ°„ 데이터λ₯Ό μΆ”μΆœν•˜λŠ” 것을 μ˜λ―Έν•©λ‹ˆλ‹€.
데이터가 μ‚½μž…λ˜λŠ” 곳을 rear, 데이터가 μ œκ±°λ˜λŠ” 곳을 front 라 ν•œλ‹€. 데이터λ₯Ό μ‚­μ œν•˜κΈ° μ „μ—λŠ” 큐가 empty ν•œμ§€, 큐에 데이터λ₯Ό μΆ”κ°€ν•˜λ € ν•  λ•ŒλŠ” 큐가 full 인지 확인 ν›„ μ§„ν–‰ν•΄μ•Ό ν•©λ‹ˆλ‹€.
front, rear λŠ” μ¦κ°€λ§Œ ν•˜λŠ” 방식이고 μ‹€μ œλ‘œλŠ” front μ•žμͺ½μ— 곡간이 μžˆλ”λΌλ„ μ‚½μž…ν•  수 μ—†λŠ” κ²½μš°κ°€ λ°œμƒν•  수 μžˆμŠ΅λ‹ˆλ‹€.
μ‚½μž…μ„ μœ„ν•΄μ„œλŠ” κ³„μ†ν•΄μ„œ μš”μ†Œλ“€μ„ μ΄λ™μ‹œμΌœμ•Ό ν•©λ‹ˆλ‹€.

πŸ“Œ 큐의 μž₯단점

데이터 μ ‘κ·Ό, μ‚½μž…, μ‚­μ œκ°€ λΉ λ₯΄λ‹€.
큐 μ—­μ‹œ μŠ€νƒκ³Ό λ§ˆμ°¬κ°€μ§€λ‘œ 쀑간에 μœ„μΉ˜ν•œ 데이터에 λŒ€ν•œ 접근이 λΆˆκ°€λŠ₯ν•˜λ‹€.

πŸ“Œ 큐의 ν™œμš© μ˜ˆμ‹œ

νλŠ” 주둜 데이터가 μž…λ ₯된 μ‹œκ°„ μˆœμ„œλŒ€λ‘œ μ²˜λ¦¬ν•΄μ•Ό ν•  ν•„μš”κ°€ μžˆλŠ” 상황에 μ΄μš©ν•©λ‹ˆλ‹€.

  • ν”„λ¦°ν„° 인쇄 λŒ€κΈ°μ—΄
  • 은행 업무
  • λŒ€κΈ° μˆœμ„œ 관리
  • ν”„λ‘œμ„ΈμŠ€ 관리
  • λ„ˆλΉ„ μš°μ„  탐색(BFS, Breadth-First Search) κ΅¬ν˜„
  • μΊμ‹œ(Cache) κ΅¬ν˜„