Post

Dynamic Array vs Linked List

๐Ÿค” Array

  • ์ž…๋ ฅ๋œ ๋ฐ์ดํ„ฐ๋“ค์ด ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์—์„œ ์—ฐ์†์ ์œผ๋กœ ์ €์žฅ๋˜์–ด ์žˆ๋Š” ์ž๋ฃŒ๊ตฌ์กฐ
  • ๋ฉ”๋ชจ๋ฆฌ์ƒ์—์„œ ์—ฐ์†์ ์œผ๋กœ ์ €์žฅ๋˜์–ด ์žˆ๋Š” ํŠน์ง•์„ ๊ฐ–๊ธฐ ๋•Œ๋ฌธ์—, index๋ฅผ ํ†ตํ•œ ์ ‘๊ทผ์ด ์šฉ์ดํ•˜๋‹ค.
  • ๋ฐฐ์—ด์˜ ํฌ๊ธฐ๋Š” ์ฒ˜์Œ ์ƒ์„ฑํ•  ๋•Œ ์ •ํ•˜๋ฉฐ, ์ดํ›„์—๋Š” ๋ณ€๊ฒฝํ•  ์ˆ˜ ์—†๋‹ค.

array


[Array ์‹œ๊ฐ„๋ณต์žก๋„]

  • ํƒ์ƒ‰ : O(1)
    • ์ ‘๊ทผํ•˜๊ณ ์ž ํ•˜๋Š” ์ธ๋ฑ์Šค๋ฅผ ์•Œ๊ณ  ์žˆ์„ ๋•Œ, ํ•ด๋‹น ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ๋กœ ๋ฐ”๋กœ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ์‚ฝ์ž… ๋ฐ ์‚ญ์ œ : O(n)
    • ๋ฐฐ์—ด์˜ ๋์—์„œ ์ž‘์—…์ด ์ˆ˜ํ–‰๋˜๋ฉด O(1)์ด์ง€๋งŒ ๋ณดํ†ต์˜ ๊ฒฝ์šฐ ์ค‘๊ฐ„์— ์‚ฝ์ž…/์‚ญ์ œ๋œ๋‹ค.
    • ์ด์— ๋”ฐ๋ฅธ ๋’ค์˜ ๋ฐ์ดํ„ฐ๋“ค๋„ ์˜ฎ๊ฒจ์ฃผ๋Š” ์ž‘์—…์„ ํ•ด์•ผํ•˜๋ฏ€๋กœ O(n)์ด ์†Œ์š”๋œ๋‹ค.


[Array์˜ ํ•œ๊ณ„]

  1. ์ƒ์„ฑ ์‹œ์— ๊ธธ์ด๊ฐ€ ์ •ํ•ด์ง€๋ฏ€๋กœ ๊ธธ์ด๋ฅผ ๋ฐ”๊พธ๋Š” ๋ฐ์— ๋น„ํšจ์œจ์ ์ด๋‹ค.
    • ์ƒˆ๋กœ์šด ๊ธธ์ด์˜ ๋ฐฐ์—ด์„ ๋ฉ”๋ชจ๋ฆฌ์— ๋”ฐ๋กœ ํ• ๋‹นํ•˜๊ณ , ๋ฐ์ดํ„ฐ๋ฅผ ๋ณต์‚ฌํ•œ ํ›„, ๊ธฐ์กด์˜ ๋ฐฐ์—ด์„ ์‚ญ์ œํ•˜๋Š” ์„ธ ๋‹จ๊ณ„๋ฅผ ๊ฑฐ์ณ์•ผํ•œ๋‹ค.
    • ๊ธธ์ด๋ฅผ ๋Š˜๋ฆฌ๋Š” ์ž‘์—… ์ž์ฒด๊ฐ€ ์ง€์›๋˜์ง€ ์•Š์œผ๋ฏ€๋กœ ๊ฐœ๋ฐœ์ž๊ฐ€ ์ง์ ‘ ๋กœ์ง์„ ์„ค๊ณ„ํ•ด์•ผ ํ•œ๋‹ค.
  2. Inner Fragmentation
    • ๋ฐ์ดํ„ฐ๊ฐ€ ์—†์–ด๋„ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ฐจ์ง€ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์›์†Œ๊ฐ€ ์‚ญ์ œ๋˜์–ด๋„ ๋นˆ์ž๋ฆฌ(null)๊ฐ€ ๋‚จ๊ฒŒ ๋œ๋‹ค.
  3. Outer Fragmentation
    • array๋Š” ๋ฉ”๋ชจ๋ฆฌ์˜ ์—ฐ์†๋œ ๊ณต๊ฐ„์„ ํ•„์š”๋กœ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ˆ˜์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์ถฉ๋ถ„ํ•œ ๊ณต๊ฐ„์ด ์žˆ์Œ์—๋„ ์—ฐ์†๋˜์ง€ ์•Š๋‹ค๋ฉด ์ €์žฅํ•  ์ˆ˜ ์—†๋‹ค.

    ์•„๋ž˜ ๊ทธ๋ฆผ์—์„œ ๋งŒ์•ฝ ๋ฐฐ์—ด์ด 50KB์˜ ์—ฐ์†๋œ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์„ ํ•„์š”๋กœ ํ•œ๋‹ค๋ฉด ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์ด ๋‹ค ๋‚˜๋‰˜์–ด์ ธ ์žˆ์œผ๋ฏ€๋กœ ์ €์žฅํ•  ์ˆ˜ ์—†๋‹ค.

    outer fragment


๐Ÿ˜ฎ Dynamic Array

  • Java : ArrayList
  • C++ : Vector

  • ๊ณ ์ •๋œ ๊ธธ์ด๋ฅผ ๊ฐ–๋Š” Array์˜ ํ•œ๊ณ„๋ฅผ ๊ทน๋ณตํ•˜๊ธฐ ์œ„ํ•ด ๋‚˜์˜จ ์ž๋ฃŒ๊ตฌ์กฐ์ด๋‹ค.
  • ํฌ๊ธฐ๊ฐ€ ๊ฐ€๋ณ€์ ์œผ๋กœ ๋ณ€ํ•˜๋Š” ์„ ํ˜•๋ฆฌ์ŠคํŠธ์ด๋‹ค.
    • ๋”ฐ๋ผ์„œ ํฌ๊ธฐ๊ฐ€ ๋ณ€ํ•˜๋Š” ๋ฐฐ์—ด์„ ์‚ฌ์šฉํ•  ๋•Œ๋‚˜ ๋ฐฐ์—ด์˜ ํฌ๊ธฐ๋ฅผ ์•Œ ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ์— ์‚ฌ์šฉํ•œ๋‹ค.
  • ์‹œ๊ฐ„๋ณต์žก๋„๋Š” ์ผ๋ฐ˜ array์™€ ๊ฐ™๋‹ค.
  • ๋Ÿฐํƒ€์ž„ ์‹œ์— ์ž๋™์œผ๋กœ ๊ธธ์ด๊ฐ€ ์ฆ๊ฐ€ํ•˜์ง€๋งŒ Fragmentation ๋ฌธ์ œ๋Š” ํ•ด๊ฒฐ๋˜์ง€ ์•Š์•˜๋‹ค.


๐Ÿ˜™ Linked List

  • ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๋…ธ๋“œ๋“ค์ด ์ˆœ์ฐจ์ ์œผ๋กœ ์—ฐ๊ฒฐ๋œ ํ˜•ํƒœ๋ฅผ ๊ฐ–๋Š” ์ž๋ฃŒ๊ตฌ์กฐ
  • ์ฒซ๋ฒˆ์งธ ๋…ธ๋“œ๋ฅผ Head, ๋งˆ์ง€๋ง‰ ๋…ธ๋“œ๋ฅผ Tail ์ด๋ผ๊ณ  ํ•œ๋‹ค.
  • ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋Š” ๊ฐ ๋…ธ๋“œ๋Š” ์ด์ „ ๋…ธ๋“œ์™€ ๋‹ค์Œ ๋…ธ๋“œ์˜ ์ƒํƒœ๋งŒ ์•Œ๊ณ  ์žˆ์œผ๋ฉด ๋œ๋‹ค.
    • ๋ฐฐ์—ด๊ณผ๋Š” ๋‹ค๋ฅด๊ฒŒ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์—ฐ์†์ ์œผ๋กœ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค.


[LinkedList ์‹œ๊ฐ„๋ณต์žก๋„]

  • ํƒ์ƒ‰ : O(n)
    • ์ฒ˜์Œ๋ถ€ํ„ฐ ๋…ธ๋“œ๋ฅผ ์ˆœํšŒํ•˜์—ฌ ํƒ์ƒ‰ํ•˜๋ฏ€๋กœ O(n) ์ด๋‹ค.
  • ์‚ฝ์ž… ๋ฐ ์‚ญ์ œ : O(1)
    • ๋ถˆํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ์˜ ๋ณต์‚ฌ๊ฐ€ ์—†์–ด ๋ฐ์ดํ„ฐ์˜ ์‚ฝ์ž…, ์‚ญ์ œ ์‹œ ์œ ๋ฆฌํ•˜๋‹ค.
    • ๊ทธ๋Ÿฌ๋‚˜ ์‚ฝ์ž…, ์‚ญ์ œ๋ฅผ ํ•˜๊ธฐ ์œ„ํ•œ ๋…ธ๋“œ๋ฅผ ์ฐพ๋Š” ์‹œ๊ฐ„์€ O(n) ์ด ๊ฑธ๋ฆฐ๋‹ค.


๐Ÿ˜จ ํ• ๋‹น ์˜์—ญ

  • ์ผ๋ฐ˜์ ์œผ๋กœ ๋ฐฐ์—ด์€ stack ์— ํ• ๋‹น๋œ๋‹ค.
  • ๊ทธ๋Ÿฌ๋‚˜ new ์—ฐ์‚ฐ์ž๋กœ ์ƒ์„ฑ๋˜๋Š” ๊ฒฝ์šฐ heap ์— ํ• ๋‹น๋œ๋‹ค.
  • JAVA๋Š” ๋ชจ๋‘ new ์—ฐ์‚ฐ์ž๋กœ ์ƒ์„ฑ๋˜๋ฏ€๋กœ ๋ชจ๋‘ heap ์— ํ• ๋‹น๋œ๋‹ค.
  • LinkedList๋„ new ๋กœ ์ƒ์„ฑํ•˜๋ฏ€๋กœ heap์— ํ• ๋‹น๋œ๋‹ค.
1
2
int stackArray[5];  // stack ์— ํ• ๋‹น๋œ๋‹ค.
int* array = new int[10];   // heap ์— ํ• ๋‹น๋œ๋‹ค.
1
int[] array = new int[10];  // heap ์— ํ• ๋‹น๋œ๋‹ค.


๐Ÿค— ์ž๋ฃŒ๊ตฌ์กฐ ์„ ํƒ

  • ๋ฐ์ดํ„ฐ์˜ ๊ฒ€์ƒ‰์ด ์ฃผ๊ฐ€ ๋˜๋Š” ๊ฒฝ์šฐ Dynamic Array๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.
  • ๋ฐ์ดํ„ฐ์˜ ์‚ฝ์ž…, ์‚ญ์ œ๊ฐ€ ๋นˆ๋ฒˆํ•˜๋‹ค๋ฉด LinkedList๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.


[๋ฐฑ์ค€ ๋ฌธ์ œ๋ฅผ ํ†ตํ•œ ์ž๋ฃŒ๊ตฌ์กฐ ์ฐจ์ด ์ฒดํ—˜]

  • 16235 - ๋‚˜๋ฌด ์žฌํ…Œํฌ (๊ณจ๋“œ 3)

  • ์‚ผ์„ฑ ๊ธฐ์ถœ ๋ฌธ์ œ์˜ ๊ตฌํ˜„ ๋ฌธ์ œ์ด๋‹ค.
  • ์‹œ๊ฐ„ ์ œํ•œ์ด 0.3์ดˆ๋กœ ์งง๊ฒŒ ์„ค์ •๋˜์–ด ์žˆ๊ณ  ์‚ญ์ œ ์—ฐ์‚ฐ์ด ๋นˆ๋ฒˆํ•˜๊ฒŒ ๋ฐœ์ƒํ•œ๋‹ค.
  • ๋”ฐ๋ผ์„œ Dynamic Array๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์‹œ๊ฐ„์ดˆ๊ณผ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฏ€๋กœ LinkedList๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค.


๋ˆ„๊ตฐ๊ฐ€๊ฐ€ ๋ฌผ์–ด๋ณธ๋‹ค๋ฉด

Dynamic Array๋Š” Array์˜ ํฌ๊ธฐ ๋ณ€๊ฒฝ ๋ถˆ๊ฐ€๋ผ๋Š” ๋‹จ์ ์„ ๋ณด์™„ํ•˜๊ธฐ ์œ„ํ•ด ๋งŒ๋“ค์–ด์กŒ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ Fragmentation ๋ฌธ์ œ๋Š” ํ•ด๊ฒฐ๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

๊ฒ€์ƒ‰์ด ์ž์ฃผ ๋ฐœ์ƒํ•˜๋Š” ๊ฒฝ์šฐ Array๋ฅผ, ์‚ฝ์ž… ๋ฐ ์‚ญ์ œ๊ฐ€ ์ž์ฃผ ๋ฐœ์ƒํ•˜๋Š” ๊ฒฝ์šฐ LinkedList๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ๋” ์œ ๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
This post is licensed under CC BY 4.0 by the author.