[Session] [Data Structure] 01. Array & Tuple

Danbi Choยท2020๋…„ 4์›” 9์ผ
0

Session

๋ชฉ๋ก ๋ณด๊ธฐ
2/9

Data Structure

๐Ÿ“Œ What You Will Learn
โœ”๏ธData Structure์˜ ๊ฐœ๋… ํ•„์š”์„ฑ, ๊ทธ๋ฆฌ๊ณ  ๋‹ค์–‘ํ•œ ์ข…๋ฅ˜์˜ ์ž๋ฃŒ๊ตฌ์กฐ์— ๋Œ€ํ•ด ์ดํ•ดํ•œ๋‹ค.
โœ”๏ธArray์˜ ๊ฐœ๋…๊ณผ ์žฅ์ , ๋‹จ์ , ๊ทธ๋ฆฌ๊ณ  ์–ธ์ œ ์‚ฌ์šฉํ•˜๋ฉด ์ข‹์€์ง€ ์ดํ•ดํ•œ๋‹ค.
โœ”๏ธTuple์˜ ๊ฐœ๋…๊ณผ ์žฅ์ , ๋‹จ์ , ๊ทธ๋ฆฌ๊ณ  ์–ธ์ œ ์‚ฌ์šฉํ•˜๋ฉด ์ข‹์€์ง€ ์ดํ•ดํ•œ๋‹ค.

Data Structure(์ž๋ฃŒ ๊ตฌ์กฐ)๋ž€?

  • ์ž๋ฃŒ๊ตฌ์กฐ : ๋ฐ์ดํ„ฐ์— ํŽธํ•˜๊ฒŒ ์ ‘๊ทผํ•˜๊ณ  ์กฐ์ž‘ํ•˜๊ธฐ ์œ„ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ฑฐ๋‚˜ ์กฐ์ž‘ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋งํ•œ๋‹ค.
  • ๊ฐ๊ฐ์˜ ์ž๋ฃŒ๊ตฌ์กฐ๊ฐ€ ๊ฐ€์ง„ ์žฅ์ ๊ณผ ํ•œ๊ณ„๋ฅผ ์ดํ•ดํ•˜๊ณ  ์ƒํ™ฉ์— ๋งž๊ฒŒ ์ž๋ฃŒ ๊ตฌ์กฐ๋ฅผ ์„ ํƒํ•˜๊ณ  ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•˜๋‹ค.
  • ๊ฐ ์–ธ์–ด๋งˆ๋‹ค ๊ฐ€์ง„ ์ž๋ฃŒ๊ตฌ์กฐ์˜ ์ข…๋ฅ˜์™€ ์‚ฌ์šฉ๋ฒ•์ด ๋‹ค๋ฅด๊ธฐ ๋•Œ๋ฌธ์—, ์ž๋ฃŒ๊ตฌ์กฐ์˜ ๋ณธ์งˆ์„ ์ดํ•ดํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•˜๋‹ค.

์™œ ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ์‚ฌ์šฉํ•˜๋Š”๊ฐ€?

  • ์ž๋ฃŒ๊ตฌ์กฐ๋ž€ ์ƒํ™ฉ๊ณผ ๋ฌธ๋งฅ์— ๋งž๊ฒŒ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ด์„ ์ˆ˜ ์žˆ๋Š” ์ ์ ˆํ•œ ๊ตฌ์กฐ๋ฅผ ๋งํ•œ๋‹ค.
  • ๋ฐ์ดํ„ฐ์— ๋งž๋Š” ์ ์ ˆํ•œ ์ž๋ฃŒ ๊ตฌ์กฐ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์€ ๋งค์šฐ ์ค‘์š”ํ•˜๋ฉด์„œ ์ „์ฒด ๊ฐœ๋ฐœ ์‹œ์Šคํ…œ์— ๋งŽ์€ ์˜ํ–ฅ์„ ๋ผ์นœ๋‹ค.

์ž๋ฃŒ ๊ตฌ์กฐ์˜ ๋ถ„๋ฅ˜

  • Primitive Data Structure(๋‹จ์ˆœ ๊ตฌ์กฐ)
    ํ”„๋กœ๊ทธ๋ž˜๋ฐ์—์„œ ์‚ฌ์šฉ๋˜๋Š” ๊ธฐ๋ณธ ๋ฐ์ดํ„ฐ ํƒ€์ž…

  • None-Primitive Data Structure(๋น„ ๋‹จ์ˆœ ๊ตฌ์กฐ)
    ๋‹จ์ˆœํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋Š” ๊ตฌ์กฐ๊ฐ€ ์•„๋‹ˆ๋ผย ์—ฌ๋Ÿฌ ๋ฐ์ดํ„ฐ๋ฅผ ๋ชฉ์ ์— ๋งž๊ฒŒ ํšจ๊ณผ์ ์œผ๋กœ ์ €์žฅํ•˜๋Š” ์ž๋ฃŒ ๊ตฌ์กฐ
    - Linear Data Structure(์„ ํ˜• ๊ตฌ์กฐ)
    ย ย ย ์ €์žฅ๋˜๋Š” ์ž๋ฃŒ์˜ ์ „ํ›„ ๊ด€๊ณ„๊ฐ€ 1:1 (ex. List, Stacks, Queues)
    - Non-Linear Data Structure(๋น„์„ ํ˜• ๊ตฌ์กฐ)
    ย ย ย ๋ฐ์ดํ„ฐ ํ•ญ๋ชฉ ์‚ฌ์ด์˜ ๊ด€๊ณ„๊ฐ€ 1:n ๋˜๋Š” n:m (ex. Graphs, Trees )

์ž์ฃผ ์‚ฌ์šฉ ๋˜๋Š” ์ž๋ฃŒ ๊ตฌ์กฐ

  • Array(Python์—์„œ๋Š” List)
  • Tuple
  • Set
  • Dictionary
  • Stack & Queue
  • Tree

1.Array(List)

JavaScript์—์„œ๋Š” Array, Python์—์„œ๋Š” List

Array ํŠน์ง•

์ˆœ์ฐจ์ ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋Š” ์ž๋ฃŒ๊ตฌ์กฐ

  • ์ˆœ์ฐจ์ (ordered)์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•œ๋‹ค.
  • ์ž๋ฃŒ๊ตฌ์กฐ์— ์ €์žฅํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ผ๋ฐ˜์ ์œผ๋กœ ์š”์†Œ(element)๋ผ๊ณ  ํ•œ๋‹ค.
  • ์ฃผ๋กœ ์„œ๋กœ ์—ฐ๊ฒฐ๋œ ๋ฐ์ดํ„ฐ๋“ค์„ ์ˆœ์ฐจ์ ์œผ๋กœ ์ €์žฅํ• ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค.

๊ธฐํƒ€ ํŠน์ง•

  • ์‚ฝ์ž…(insertion) ์ˆœ์„œ๋Œ€๋กœ ์ €์žฅ๋œ๋‹ค. (์ƒˆ๋กœ ์‚ฝ์ž…๋˜๋Š” ์š”์†Œ๋Š” array์˜ ์ƒˆ๋กœ์šด ๊ผฌ๋ฆฌ๊ฐ€ ๋œ๋‹ค.)
  • ์ด๋ฏธ ์ƒ์„ฑ๋œ ๋ฆฌ์ŠคํŠธ๋„ ์ˆ˜์ • ๊ฐ€๋Šฅ(mutable).
  • ๋™์ผํ•œ ๊ฐ’๋„ ์—ฌ๋Ÿฌ๋ฒˆ ์‚ฝ์ž… ๊ฐ€๋Šฅ.
  • Multi-dimentional Array(๋‹ค์ค‘์ฐจ์› ๋ฐฐ์—ด)
    Array์˜ ์š”์†Œ๊ฐ€ array๊ฐ€ ๋  ์ˆ˜ ์žˆ๋‹ค. ๋‹ค์ค‘์ฐจ์›(multi-dimentional) array๋ผ๊ณ  ํ•œ๋‹ค.
    ์ผ๋ฐ˜์ ์œผ๋กœ 2D (2์ฐจ์›) array๊ฐ€ ๋งŽ์ด ์‚ฌ์šฉ๋œ๋‹ค.

Array ๋‚ด๋ถ€ ๊ตฌ์กฐ

  • ์ˆœ์ฐจ์ ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ˆœ์ฐจ์ ์œผ๋กœ ๋ฒˆํ˜ธ๋ฅผ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋‹ค. (์ด ๋ฒˆํ˜ธ๋ฅผ Index๋ผ๊ณ  ํ•œ๋‹ค)
  • Index๋Š” 0๋ถ€ํ„ฐ ์‹œ์ž‘
    Index๋Š” ๋งˆ์ด๋„ˆ์Šค ๋ถ€ํ˜ธ๋ฅผ ๊ฐ€์งˆ ์ˆ˜๋„ ์žˆ๋‹ค. ๋งˆ์ด๋„ˆ์Šค Index๋Š” ๋งจ ๋งˆ์ง€๋ง‰ ์š”์†Œ๋ถ€ํ„ฐ ์‹œ์ž‘. (๋งจ ๋งˆ์ง€๋ง‰ ์š”์†Œ๋Š” -1)

Array๊ฐ€ ์ˆœ์ฐจ์ ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•  ์ˆ˜ ๋ฐ–์— ์—†๋Š” ์ด์œ ?

  • ๋ฌผ๋ฆฌ์ ์œผ๋กœ ๋ฐ์ดํ„ฐ๊ฐ€ ์ˆœ์ฐจ์ ์œผ๋กœ ์ €์žฅ๋˜๊ธฐ ๋•Œ๋ฌธ
  • ๋ฐ์ดํ„ฐ์— ์ˆœ์„œ๊ฐ€ ์žˆ๊ธฐ ๋•Œ๋ฌธ์—
    Index๊ฐ€ ์กด์žฌ: 0๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜๋Š” index
    Indexing: Index๋ฅผ ์‚ฌ์šฉํ•ด ํŠน์ • ์š”์†Œ๋ฅผ array(list)๋กœ ๋ถ€ํ„ฐ ์ฝ์–ด ์˜ค๋Š” ๊ฒƒ์ด ๊ฐ€๋Šฅ
    Slicing: ์š”์†Œ์˜ ํŠน์ • ๋ถ€๋ถ„์„ ๋”ฐ๋กœ ๋ถ„๋ฆฌํ•ด ์กฐ์ž‘ํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€๋Šฅ

๋‹จ์ 

1. Removing or Adding Elements

  • ์ˆœ์ฐจ์ ์œผ๋กœ ๋‹ด๊ฒจ์žˆ๋Š” ๋ฐ์ดํ„ฐ ์ค‘ ์ค‘๊ฐ„ ์š”์†Œ๊ฐ€ ์‚ญ์ œ ๋˜๋Š” ๊ฒฝ์šฐ์—, ์‚ญ์ œ ๋œ ์š”์†Œ๋ถ€ํ„ฐ ๋’ค์— ์žˆ๋Š” ๋ชจ๋“  ์š”์†Œ๋“ค์€ ์•ž์œผ๋กœ ํ•œ์นธ์”ฉ ์ด๋™ ํ•ด์•ผ ํ•œ๋‹ค. (์ด ๋•Œ๋ฌธ์—, ๋ฐฐ์—ด์—์„œ ์š”์†Œ๋ฅผ ์‚ญ์ œํ•˜๋Š” ๊ฒƒ์€ ๋‹ค๋ฅธ ์ž๋ฃŒ ๊ตฌ์กฐ์— ๋น„ํ•ด ๋Š๋ฆด ์ˆ˜ ์žˆ๋‹ค)
  • ์š”์†Œ ์‚ญ์ œ ๊ณผ์ •์ด ์ฝ”๋“œ์—์„œ๋Š” ํ•œ ์ค„์ด์ง€๋งŒ ์‹ค์ œ ๋ฉ”๋ชจ๋ฆฌ์—์„œ์˜ ์ž‘์—…(operation)์€ ํ›จ์”ฌ ํฌ๋‹ค -> expenxive operation
  • ์ค‘๊ฐ„์— ์š”์†Œ๊ฐ€ ์ถ”๊ฐ€ ๋˜๋Š” ๊ฒฝ์šฐ๋„ ๊ทธ ๋’ค์˜ ์š”์†Œ๋“ค์ด ํ•˜๋‚˜์”ฉ ๋ฐ€๋ฆฌ๊ฒŒ ๋œ๋‹ค.

๐Ÿ“Œ ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— Array๋Š” ์ •๋ณด๊ฐ€ ์ž์ฃผ ์‚ญ์ œ๋˜๊ฑฐ๋‚˜ ์ถ”๊ฐ€๋˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ด๊ธฐ์—๋Š” ์ ์ ˆํ•˜์ง€ ์•Š๋‹ค.

2. Array Resizing

  • Resizing์€ ๋ง ๊ทธ๋Œ€๋กœ ์‚ฌ์ด์ฆˆ๋ฅผ ๋‹ค์‹œ ์กฐ์ •ํ•œ๋‹ค๋Š” ๋œป
  • ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ์ˆœ์ฐจ์ ์œผ๋กœ ์ฑ„์›Œ์ง€๊ธฐ ๋•Œ๋ฌธ์— ๋ฐฐ์—ด์ด ์ƒ์„ฑ๋  ๋•Œ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๋ฏธ๋ฆฌ ํ• ๋‹น (pre-allocation)
  • ์š”์†Œ๊ฐ€ ์ฒ˜๋ฆ„ ํ• ๋‹นํ•œ ๋ฉ”๋ชจ๋ฆฌ ์ด์ƒ์œผ๋กœ ๋งŽ์•„์ง€๋ฉด resizing์ด ํ•„์š” (๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๋” ํ• ๋‹น ํ•ด์•ผ ํ•จ)
  • ์ถ”๊ฐ€์ ์œผ๋กœ ํ• ๋‹น๋œ ๋ฉ”๋ชจ๋ฆฌ๋„ ์ˆœ์ฐจ์ ์ด์–ด์•ผ ํ•œ๋‹ค.

- resizing์€ ์ƒ๋Œ€์ ์œผ๋กœ ์˜ค๋ž˜ ๊ฑธ๋ฆฌ๋Š” operation
์ฒ˜์Œ ๋ฐฐ์—ด์— 100๊ฐœ์˜ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์„ ๋งŒ๋“  ํ›„, 100๊ฐœ์˜ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์ด ๋‹ค ์ฐจ์„œ 100๊ฐœ๋ฅผ ์ถ”๊ฐ€ํ•ด์•ผ ๋˜๋Š” ๊ฒฝ์šฐ
200๊ฐœ ํฌ๊ธฐ์˜ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ƒ์„ฑ - ๊ธฐ์กด 100๊ฐœ์˜ ๋ฉ”๋ชจ๋ฆฌ ๋ณต์‚ฌ - ๋‹ค์Œ 101๋ฒˆ ๋ถ€ํ„ฐ ๋ฐ์ดํ„ฐ๋ฅผ ์ˆœ์ฐจ์ ์œผ๋กœ ์ถ”๊ฐ€

  • ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ์‚ฌ์ด์ฆˆ ์˜ˆ์ธก์ด ์ž˜ ๋˜์ง€ ์•Š๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค๋ฃจ๊ธฐ์— Array๋Š” ์ ์ ˆํ•˜์ง€ ์•Š๋‹ค.
  • ์ผ๋ฐ˜์ ์œผ๋กœ ๋Œ€๋ถ€๋ถ„์˜ ์–ธ์–ด์—์„œ๋Š” ๋ฐฐ์—ด์˜ ๋ฉ”๋ชจ๋ฆฌ pre-allocation๊ณผ resizing์„ ์ž๋™์œผ๋กœ ์‹คํ–‰ํ•œ๋‹ค.
    ํ•˜์ง€๋งŒ ์‚ฌ์ด์ฆˆ๊ฐ€ ๊ธ‰๊ฒฉํ•˜๊ฒŒ ์ž์ฃผ ๋Š˜์–ด๋‚  ํ™•๋ฅ ์ด ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋Š” array ๋Œ€์‹  ๋” ์ ํ•ฉํ•œ ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ์„ ํƒํ•ด์•ผ ํ•œ๋‹ค.

์–ธ์ œ ์‚ฌ์šฉํ•˜๋ฉด ์ข‹์„๊นŒ์š”?

  • ์ˆœ์ฐจ์ ์ธ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•  ๋•Œ
    (ex. ์ฃผ์‹ ๊ฐ€๊ฒฉ / ์–ด์ œ์˜ ๊ธˆ์•ก๊ณผ ์˜ค๋Š˜์˜ ๊ธˆ์•ก์ด ๋‹ค๋ฆ„ - ๊ฐ’๋ณด๋‹ค๋Š” ์ˆœ์„œ๊ฐ€ ์ค‘์š”ํ•œ ๋ฐ์ดํ„ฐ)
  • ๋‹ค์ฐจ์›์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค๋ฃฐ ๋•Œ
    (Multi-dimensional Array)
  • ํŠน์ • ์š”์†Œ๋ฅผ ๋น ๋ฅด๊ฒŒ ์ฝ์–ด์•ผ ํ•  ๋•Œ
    (Index๋ฅผ ์‚ฌ์šฉํ•ด ๋ฐ”๋กœ ์ฝ์„ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ)
  • ๋ฐ์ดํ„ฐ์˜ ์‚ฌ์ด์ฆˆ๊ฐ€ ๊ธ‰๋ณ€ํ•˜๊ฒŒ ์ž์ฃผ ๋ณ€ํ•˜์ง€ ์•Š์„ ๋•Œ
  • ์š”์†Œ๊ฐ€ ์ž์ฃผ ์‚ญ์ œ๋˜๊ฑฐ๋‚˜ ์ถ”๊ฐ€๋˜์ง€ ์•Š์„ ๋•Œ
profile
๋ฃฐ๋ฃจ๋ž„๋ผ! ๊ฐœ๋ฐœ์ž ๋˜๊ณ  ์‹ถ์–ด์š”๐Ÿ™ˆ

0๊ฐœ์˜ ๋Œ“๊ธ€