Preface
๐ ๊ฐ๋ฐ ๊ณต๋ถ 8๊ฐ์ ์ฐจ์ธ to-be ๊ฐ๋ฐ์์ ์์ต blog๐๏พ Mar 20 ~ 26, 2022
ํ์ฌ ์ํ
๋๋ฌด ์ด๋ ค์ ๋ณด์ฌ์ ์ธ๋ฉดํ๋ค๊ฐ ์ด์ ์์ผ ๋ค์ฌ๋ค๋ณธ ์๋ฃ ๊ตฌ์กฐ์ algorithm
Summary
Data Structure
data๋ ํ๋์ ๊ธฐ๋ฆ๊ณผ ๊ฐ๋ค.
FE๋ BE๋ก๋ถํฐ ๋ชป์๊ธด JSON data๋ฅผ ๊ฐ์ ธ๊ฐ ์์ UI๋ก ๊ตฌํํ๊ณ BE๋ data๋ฅผ ๊ฒ์, ํธ์ง, ์์ , ์ถ๊ฐ ๋ฑ์ ๊ด๋ฆฌํ๋ค.
data๋ฅผ ์ด๋ค ๊ตฌ์กฐ๋ก ์ ๋ฆฌํ๋๋์ ๋ฐ๋ผ application์ ์๋๊ฐ ์ข์ฐ๋๋ค.
์ด๋ค ๋ชฉ์ ์ ๋๊ณ ์๋์ง์ ๋ฐ๋ผ ์ด๋ค ๊ตฌ์กฐ๋ก ๊ด๋ฆฌํ ์ง๊ฐ ๋ฌ๋ผ์ง๋ค.
Algorithm
๋ชฉ์ ์ ๋ฌ์ฑํ๊ธฐ ์ํด computer๊ฐ ์ํํด์ผ ํ๋ ์ฌ๋ฌ๊ฐ์ง ์ง์ ์ฌํญ์ด๋ค.
์ฆ ๋ฐ๋ผ์ผ ํ๋ ์ ์ฐจ (step) ์ด๋ค.
e.g. ์ง๋, ์์ถ, ์ํธ algorithm
โ๏ธ Time Complexity
data ๊ตฌ์กฐ์ operation ํน์ algorithm์ด ์ผ๋ง๋ ๋น ๋ฅธ์ง ์ธก์ ํ๋ ๋ฐฉ๋ฒ์ด๋ค.
์๊ฐ์ผ๋ก ์ธก์ ํ๋ ์๋๋ computer๋ผ๋ hardware๊ฐ ๊ฒฐ์ ํ๋ฏ๋ก algorithm์ ์๋๋ ์ค์ ์๊ฐ์ ์ธก์ ํ๋ ๊ฒ์ด ์๋ '์๋ฃ๊น์ง ๊ฑธ๋ฆฌ๋ ์ ์ฐจ์ ์ (๋จ๊ณ)'๋ก ์ธก์ ํ๋ค.
ํ๊ท scenario๊ฐ ๊ธฐ์ค์ด๋ฏ๋ก best scenario๊ฐ ์๋์ง ์ดํด๋ณด์์ผ ํ๋ค.
worst scenario๊ฐ ๊ธฐ์ค์ด๋ ๊ฒฝ์ฐ์ ๋ฐ๋ผ best scneario๊ฐ ์๋์ง ์ดํด๋ณด์์ผ ํ๋ค.
- Big-O
- O(1)
- O(N)
- O(Nยฒ)
- nested loops๊ฐ ์์ ๋ ๋ฐ์
- O(logN)
โ๏ธ Memory
- Volatile Memory
- computer๋ฅผ ๋๋ฉด data๊ฐ ๋ชจ๋ ํ๋ฐ๋๊ณ ์์
- ๋ณ์๋ฅผ ์ค์ ํ๋ฉด RAM์ ์ ์ฅ๋จ
- RAM์์ data๋ฅผ ์ฝ๋ ๊ฒ์ด hard drive์์ ์ฝ๋ ๊ฒ๋ณด๋ค ๋น ๋ฆ
*RAM : Random Access Memory
(memory ์ฃผ์์ '์ ๊ทผ'ํ๊ธฐ ์ฝ๋ค๊ณ ํ์ง ๊ฐ์ ์๊ธฐ ์ฝ๋ค๊ณ ๋ ์ ํ๋ค...)
- Non-volatile Memory
- computer๋ฅผ ๊ป๋ค ์ผ๋ hard drive์ data๊ฐ ํ๋ฐ๋์ง ์๊ณ ๊ทธ๋๋ก ์์
(1) ์๋ฃ ๊ตฌ์กฐ๋ฅผ ์ค๊ณํ ๋์ ๋ค ๊ฐ์ง operation ์ํฉ
- reading
- searching
- insertion
- delete
(2) ์๋ฃ ๊ตฌ์กฐ์ ์ข
๋ฅ
- array
- RAM ๋๋ถ์ ๋ง์ ์๋ฃ๋ฅผ ์ฝ์ ๋ ์ ์ฉ
- ๊ฒ์ํ ๋ ํ๋ํ๋ ์ด์ด๋ณด๊ณ ํ์ธํด์ผ ํด์ ์ค๋ ๊ฑธ๋ฆผ
- linear search์ฌ์ ์๊ฐ ๋ณต์ก๋ O(N)
- ๋งจ ์์ ์ฝ์
ํ๊ฑฐ๋ ๋ฏธ๋ฆฌ ๋ฐฐ์ ํ ๊ณต๊ฐ์ ์ด๊ณผํด์ data๋ฅผ ์ฝ์
ํด์ผ ํ ๋ ๋จ๊ณ๊ฐ ๋ง์์ง
- ๋งจ ๋์ ์ฝ์
ํ๋ ๊ฒ ๋น ๋ฆ
- ๋งจ ์์ ์ญ์ ํ ๋ ๋ค์ ์๋ ์์๋ฅผ ๋ค ๋น๊ฒจ์ผ ํจ
- ๋งจ ๋์ ์ญ์ ํ๋ ๊ฒ ๋น ๋ฆ
- hash table
- 'key: value' system์ผ๋ก ์๋ฃ๋ฅผ ์ ๋ฆฌ
- ๋ด๋ถ๊ฐ array ๊ตฌ์กฐ์ด์ง๋ง hash function์ด ๋ด๊ฐ ์ ์ฅํ๊ณ ์ถ์ key๋ฅผ ์ซ์๋ก ๋ณ๊ฒฝํด index๋ก ์ ์ฅํ๋ฏ๋ก index ์์ด key์ ํด๋นํ๋ value๋ฅผ ์ฐพ์ ์ ์์
- ์ฝ๊ธฐ, ์ฐพ๊ธฐ, ์ฝ์
, ์ญ์ ๋ชจ๋์์ step์ด ํ ๊ฐ์ด๋ฏ๋ก ์๊ฐ ๋ณต์ก๋ O(1)
ref. JavaScript์ Object, Python์ Dictionary, Go์ Map...
- hash collision์ด ๋ฐ์ํ๋ฉด ๋ด๋ถ์ ์๋ก์ด array๋ฅผ ๋ง๋ค์ด linear search๋ก value๋ฅผ ์ฐพ๋๋ฐ ์ด ๋๋ฌธ์ hash table์ด ํญ์ O(1)์ ์๋๊ฒ ๋จ (ํ๊ท ์ด O(1)๋ผ๋ ๋ง)
- queue
- programming ์ธ์ด์ ์กด์ฌํ์ง๋ ์์
- code๋ก ์ ์๋ ๊ฒ์ด ์๋๋ผ ๊ทธ ๊ตฌ์กฐ์ ํ๋ ์์๋ง ์ ์๋ ์ถ์์ data ๊ตฌ์กฐ (Abstract Data Type)
- first in first out (FIFO) : ๋งจ ์์ ์๋ data๋ง ์ฝ๊ฑฐ๋ ์ญ์ ํ ์ ์์
e.g. web site ๋ค๋ก๊ฐ๊ธฐ button, Ctrl + Z
- stack
- programming ์ธ์ด์ ์กด์ฌํ์ง๋ ์์
- code๋ก ์ ์๋ ๊ฒ์ด ์๋๋ผ ๊ทธ ๊ตฌ์กฐ์ ํ๋ ์์๋ง ์ ์๋ ์ถ์์ data ๊ตฌ์กฐ (Abstract Data Type)
- last in first out (LIFO) : ๋งจ ๋ค์ ์๋ data๋ง ์ฝ๊ฑฐ๋ ์ญ์ ํ ์ ์์
e.g. mail ์ ๋ฌ, push ์๋ฆผ, shopping mall ์ ์ฐฉ์ ์ฃผ๋ฌธ, call center์ back-end
(3) algorithm ์ข
๋ฅ
๋ฐฐ์ด์์
- searching
- linear search
- ์๊ฐ ๋ณต์ก๋ O(N)
- ์ฒ์๋ถํฐ ์์๋๋ก ๋ชฉํ ๊ฐ์ ์ฐพ์
- ๋ชฉํ ๊ฐ์ด ๋งจ ๋์ ์๊ฑฐ๋ ์์ ๋ ์ค๋ ๊ฑธ๋ฆผ
- input์ด ๋ง์์ง์ ๋ฐ๋ผ ์ํ ์๊ฐ๋ ์ค๋ ๊ฑธ๋ฆผ : linear time complexity
- binary search
- ์ ๋ ฌ๋ ๋ฐฐ์ด์์๋ง ์ฌ์ฉ ๊ฐ๋ฅ
- ์ ๋ ฌ์ ๋ง๊ฒ ์ ํฉํ ์๋ฆฌ๋ฅผ ์ฐพ์ ํ ๋ฐฐ์นํด์ผ ํ๋ฏ๋ก ์ฝ์
ํ ๋ ์ค๋ ๊ฑธ๋ฆผ
- ๋ฐ์ฉ ์ชผ๊ฐ์ด ํ์ ์๋ ์ชฝ์ ๋ฒ๋ฆฌ๋ฉด์ ๊ฐ์ ๋น๊ตํ๋ฏ๋ก ๊ฒ์ํ ๋ ๋น ๋ฆ
- ํฐ ๋ฐฐ์ด์์ ๊ฒ์ํ๊ธฐ ์ข์ง๋ง ์ ๋ ฌ์ด ์ ํ๋์ด์ผ ํจ
- sorting
- bubble sort
- ์๊ฐ ๋ณต์ก๋ O(Nยฒ)
- N-1๋งํผ ๋น๊ต
- ๊ฐ์ฅ ๋ง์ด ํ๋ฉด N๋งํผ swap
- ์ดํดํ๊ธฐ ์ฌ์ด sorting ๋ฐฉ๋ฒ์ด๋ ๋นํจ์จ์ ์ด์ด์ ์ ์ ์ฐ์
- selection sort
- ์๊ฐ ๋ณต์ก๋ O(Nยฒ)
- N-1๋งํผ ๋น๊ต
- ๊ฐ์ฅ ๋ง์ด ํ๋ฉด ํ cycle์ ํ ๋ฒ swap
- insertion sort
- ์๊ฐ ๋ณต์ก๋ O(Nยฒ)
- ์
์ค ์ ์ผํ๊ฒ O(N)๋ผ๋ ์ต๊ณ ์ scenario๊ฐ ๋ฐ์ํจ
Endnote
VISUALGO
๐ the source of this content
๋
ธ๋ง๋ ์ฝ๋ Nomad Coders - ์๊ณ ๋ฆฌ์ฆ.๋ฐ์ดํฐ๊ตฌ์กฐ with Nico