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๋ฅผ ์ฌ์ฉํด ๋ฐ๋ก ์ฝ์ ์ ์๊ธฐ ๋๋ฌธ)
- ๋ฐ์ดํฐ์ ์ฌ์ด์ฆ๊ฐ ๊ธ๋ณํ๊ฒ ์์ฃผ ๋ณํ์ง ์์ ๋
- ์์๊ฐ ์์ฃผ ์ญ์ ๋๊ฑฐ๋ ์ถ๊ฐ๋์ง ์์ ๋