๋ฐ๋ธŒ์ฝ”์Šค_๋ฐ์ดํ„ฐ์—”์ง€๋‹ˆ์–ด๋ง

[Week2 ์ž๋ฃŒ๊ตฌ์กฐ/์•Œ๊ณ ๋ฆฌ์ฆ˜] TIL 2์ผ์ฐจ - ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ

๐Ÿช„ํ•˜๋ฃจ๐Ÿช„ 2023. 10. 17. 17:55
728x90

0) ์ถ”์ƒ์  ์ž๋ฃŒ๊ตฌ์กฐ(ADT)

์ž๋ฃŒ๊ตฌ์กฐ์˜ ๋‚ด๋ถ€๊ตฌํ˜„์€ ์ œ๊ณตํ•˜์ง€ ์•Š๊ณ , ๋ฐ์ดํ„ฐ์˜ ํ˜•ํƒœ๋ฅผ ์„ ์–ธํ•˜๊ณ  ๊ธฐ๋Šฅ(์—ฐ์‚ฐ)์„ ์ •์˜ํ•˜๋Š” ๊ฒƒ

 

1) ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ๋ž€?

๋…ธ๋“œ์™€ ๋…ธ๋“œ๊ฐ€ ์—ฐ๊ฒฐ๋œ ํ˜•ํƒœ์ด๋‹ค.

๋…ธ๋“œ๋Š” ๊ฐ’์„ ๋‹ด๋Š” ๋ถ€๋ถ„๊ณผ ์ฃผ์†Œ๋ฅผ ๋‹ด๋Š” ๋ถ€๋ถ„์œผ๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ๋‹ค.

์ผ๋ฐ˜ ๋ฆฌ์ŠคํŠธ์— ๋น„ํ•ด ๊ฐ’์„ ์ ‘๊ทผํ•˜๋Š” ๋ฐ๋Š” ์˜ค๋ž˜ ๊ฑธ๋ฆฌ์ง€๋งŒ(์‹œ๊ฐ„๋ณต์žก๋„ :  O(1) vs O(n)), ๋ฐ์ดํ„ฐ๋ฅผ ์ž์œ ๋กญ๊ฒŒ ์‚ฝ์ž… ์‚ญ์ œ ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์žฅ์ ์ด ์žˆ๋‹ค.

 

์˜ค๋Š˜ ์‚ดํŽด๋ณผ ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ๋Š” ๊ธฐ๋ณธ ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ, head๊ฐ€ ๋”๋ฏธ๋…ธ๋“œ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ, ์–‘๋ฐฉํ–ฅ ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ์ด๋‹ค.

 

๐Ÿฅ„๊ธฐ๋ณธ ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ

๊ธฐ๋ณธ ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ ํ˜•ํƒœ

์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ๋Š” ๋…ธ๋“œ๊ฐ€ ์—ฐ๊ฒฐ๋œ ํ˜•ํƒœ์ด๋ฉฐ,  head, tail, nodeCount๋กœ ๊ตฌ์„ฑ๋œ๋‹ค.

  • Head : ์ œ์ผ ์•ž ๋…ธ๋“œ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ํฌ์ธํ„ฐ
  • Tail : ์ œ์ผ ๋’ท ๋…ธ๋“œ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ํฌ์ธํ„ฐ
  • nodeCount : ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ์— ์žˆ๋Š” ๋…ธ๋“œ์˜ ๊ฐœ์ˆ˜

 

์—ฐ์‚ฐ

์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์—ฐ์‚ฐ์ด ์ œ๊ณต๋œ๋‹ค.

  • ํŠน์ • ์›์†Œ ์ฐธ์กฐ - getAt(pos) : pos๋ฒˆ์งธ ๋…ธ๋“œ๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
  • ๋ฆฌ์ŠคํŠธ ์ˆœํšŒ - traverse() : LinkedList์˜ ๋ชจ๋“  ๋…ธ๋“œ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.  
  • ๊ธธ์ด ์–ป์–ด๋‚ด๊ธฐ - getLength() : LinkedList์˜ ๋…ธ๋“œ ๊ฐœ์ˆ˜๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
  • ์›์†Œ ์‚ฝ์ž… - insertAt(pos, newNode) : pos๋ฒˆ์งธ์— newNode๋ฅผ ์‚ฝ์ž…ํ•œ๋‹ค.
  • ์›์†Œ ์‚ญ์ œ - popAt(pos) : pos๋ฒˆ์งธ ๋…ธ๋“œ๋ฅผ ์‚ญ์ œํ•˜๊ณ  ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
  • ๋‘ ๋ฆฌ์ŠคํŠธ ํ•ฉ์น˜๊ธฐ - concat(L) : LinkedList๋’ค์— L์„ ํ•ฉ์ณ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

 

ํด๋ž˜์Šค ๋‹ค์ด์–ด๊ทธ๋žจ

๋ฐ์ดํ„ฐ์˜ ํ˜•ํƒœ์™€ ๊ธฐ๋Šฅ์„ ํ•ฉ์นœ ํด๋ž˜์Šค ๋‹ค์ด์–ด๊ทธ๋žจ์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

์—ฐ์‚ฐ์„ ๋ณด๋ฉด ๋งจ ์•ž๊ณผ ์—ฐ๊ด€๋œ ๋…ธ๋“œ์˜ ๊ฒฝ์šฐ ์—ฐ์‚ฐ์„ ๋”ฐ๋กœ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•œ๋‹ค.

head๊ฐ€ ๋”๋ฏธ ๋…ธ๋“œ(๋นˆ ๋…ธ๋“œ)๋ฅผ ๊ฐ€๋ฆฌํ‚ค๊ฒŒ ํ•˜์—ฌ ์—ฐ์‚ฐ์„ ๊ฐ„๋‹จํ•˜๊ฒŒ ํ•ด ๋ณด์ž.

 

โ˜๏ธ๋”๋ฏธ ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ

๊ธฐ๋ณธ ๋”๋ฏธ ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ ํ˜•ํƒœ

head ํฌ์ธํ„ฐ๊ฐ€ dummy node๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋„๋ก ํ•˜๋Š” ํ˜•ํƒœ์ด๋‹ค.

 

์—ฐ์‚ฐ

ํ•ด๋‹น ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ์˜ ์—ฐ์‚ฐ์˜ ์ข…๋ฅ˜๋Š” ๊ธฐ๋ณธ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ์™€ ๊ฐ™๋‹ค.

  • ํŠน์ • ์›์†Œ ์ฐธ์กฐ - getAt(pos) : pos๋ฒˆ์งธ ๋…ธ๋“œ๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
  • ๋ฆฌ์ŠคํŠธ ์ˆœํšŒ - traverse() : LinkedList์˜ ๋ชจ๋“  ๋…ธ๋“œ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.  
  • ๊ธธ์ด ์–ป์–ด๋‚ด๊ธฐ - getLength() : LinkedList์˜ ๋…ธ๋“œ ๊ฐœ์ˆ˜๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
  • ์›์†Œ ์‚ฝ์ž… - insertAt(pos, newNode) : pos๋ฒˆ์งธ์— newNode๋ฅผ ์‚ฝ์ž…ํ•œ๋‹ค.
  • ์›์†Œ ์‚ญ์ œ - popAt(pos) : pos๋ฒˆ์งธ ๋…ธ๋“œ๋ฅผ ์‚ญ์ œํ•˜๊ณ  ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
  • ๋‘ ๋ฆฌ์ŠคํŠธ ํ•ฉ์น˜๊ธฐ - conccat(L) : LinkedList๋’ค์— L์„ ํ•ฉ์ณ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

+ ์‚ฝ์ž…, ์‚ญ์ œ ์—ฐ์‚ฐ์˜ ์žฅ์ ์„ ๊ทน๋Œ€ํ™”ํ•˜๊ธฐ ์œ„ํ•ด ์•„๋ž˜ ๋‘ ๊ฐ€์ง€ ํ•จ์ˆ˜๋ฅผ ์ถ”๊ฐ€ํ•˜์—ฌ ์—ฐ์‚ฐ์„ ๊ฐ„๋‹จํžˆ ํ•ด ๋ณด์ž.

  • insertAfter(prev, newNode)
  • popAfter(prev)

 

์ผ๋ฐ˜ ๋ฐฐ์—ด์€ ์ธ๋ฑ์Šค๋ฅผ ์ด์šฉํ•ด ๊ฐ’์„ ์ฐพ๊ธฐ ๋•Œ๋ฌธ์— ์›์†Œ๋ฅผ ์ฐธ์กฐํ•  ๋•Œ์˜์‹œ๊ฐ„๋ณต์žก๋„๊ฐ€ O(1)์ด๋‹ค.

๋ฐ˜๋ฉด, ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ๋Š” ์•ž์—์„œ๋ถ€ํ„ฐ ์ˆœ์„œ๋Œ€๋กœ ๊ฐ’์„ ์ฐพ์•„ ๋‚˜๊ฐ€์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์‹œ๊ฐ„๋ณต์žก๋„๊ฐ€ O(n)์ด๋‹ค.

๊ธฐ๋ณธ ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ๋‚˜, ๋”๋ฏธ๋…ธ๋“œ๋ฅผ ํฌํ•จํ•œ ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ ๋ชจ๋‘ ๋‹ค์Œ ๋…ธํŠธ๋กœ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ์ง€๋งŒ, ์ด์ „ ๋…ธ๋“œ๋กœ๋Š” ๋Œ์•„๊ฐ€์ง€ ๋ชปํ•˜๋Š” ๋‹จ์ ์ด ์žˆ๋‹ค. ์ด ๋•Œ๋ฌธ์— ์ผ๋ฐ˜ ๋ฆฌ์ŠคํŠธ์— ๋น„ํ•ด ์‹œ๊ฐ„ ๋ณต์žก๋„๊ฐ€ ํฐ๋ฐ, ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ์–‘๋ฐฉํ–ฅ ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ์— ๋Œ€ํ•ด ์ƒ๊ฐํ•ด ๋ณด์ž.

P : ๋‹ค์Œ๋…ธ๋“œ๋กœ ์ด๋™ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ์ด์ „ ๋…ธ๋“œ๋กœ ๋Œ์•„๊ฐ€์ง€ ๋ชปํ•จ

S : ์–‘๋ฐฉํ–ฅ ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ

 

๐Ÿด์–‘๋ฐฉํ–ฅ ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ

์–‘๋ฑกํ–ฅ ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ ํ˜•ํƒœ

 

node์— prevํฌ์ธํ„ฐ๋ฅผ ์ถ”๊ฐ€ํ•œ๋‹ค.

LinkedList์— head, tail ํฌ์ธํ„ฐ๊ฐ€ ๋”๋ฏธ ๋…ธ๋“œ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๊ฒŒ ํ•œ๋‹ค.

์ด๋ ‡๊ฒŒ ๋งํฌ๋“œ๋ฆฌ์ŠคํŠธ๋ฅผ ๊ตฌํ˜„ํ•˜๋ฉด ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ด๊ณ  ์žˆ๋Š” ๋…ธ๋“œ๋“ค์€ ๋ชจ๋‘ ๊ฐ™์€ ๋ชจ์–‘์ด๋ฏ€๋กœ ์—ฐ์‚ฐ์ด ๊ฐ„๋‹จํ•ด์ง„๋‹ค.

ํ•˜์ง€๋งŒ, ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๋” ์ฐจ์ง€ํ•˜๋Š” ๋‹จ์ ์ด ์žˆ๋‹ค.

 

 

ํด๋ž˜์Šค ๋‹ค์ด์–ด๊ทธ๋žจ

๋ฐ์ดํ„ฐ์˜ ํ˜•ํƒœ์™€ ๊ธฐ๋Šฅ์„ ํ•ฉ์นœ ํด๋ž˜์Šค ๋‹ค์ด์–ด๊ทธ๋žจ์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

์—ฐ์‚ฐ์˜ ์ข…๋ฅ˜๋Š” ๋”๋ฏธ ๋งํฌ๋“œ๋ฆฌ์ŠคํŠธ์™€ ์œ ์‚ฌํ•˜๋ฏ€๋กœ ์ƒ๋žตํ•œ๋‹ค.

 

head, tail ๋ชจ๋‘ ๋”๋ฏธ ๋…ธ๋“œ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋ฏ€๋กœ ์—ฐ์‚ฐ ์‹œ ๋ณ„๋„์˜ ์ฒ˜๋ฆฌ๋ฅผ ๋œ ์š”ํ•œ๋‹ค.

๊ฒฐ๋ก ) ์–‘๋ฐฉํ–ฅ ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ๋Š”, ๊ณต๊ฐ„๋ณต์žก๋„๊ฐ€ ์กฐ๊ธˆ ์ฆ๊ฐ€ํ•˜๋Š” ๋‹จ์ ์ด ์žˆ์ง€๋งŒ, ๊ตฌํ˜„์ด ํŽธ๋ฆฌํ•˜๋ฏ€๋กœ ์ž์ฃผ ์‚ฌ์šฉ๋œ๋‹ค.

 

์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ์˜ ๋ชจ๋“  ํ•จ์ˆ˜ ๊ตฌํ˜„์€ ๊นƒํ—ˆ๋ธŒ ๋งํฌ๋ฅผ ์ฐธ๊ณ ํ•˜์ž.

 

๊ด€๋ จ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ

from doublylinkedlist import Node
from doublylinkedlist import DoublyLinkedList
728x90