๐Ÿ“˜ Data Structure & Algorithm w/ ๋…ธ๋งˆ๋“œ์ฝ”๋”

[meษช]ยท2022๋…„ 3์›” 26์ผ
0

3. Today I Learned. Basic

๋ชฉ๋ก ๋ณด๊ธฐ
10/11

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)
      • linear search
    • O(Nยฒ)
      • nested loops๊ฐ€ ์žˆ์„ ๋•Œ ๋ฐœ์ƒ
    • O(logN)
      • binary search

โœ”๏ธ 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

profile
๋Š๋ ค๋„ ํ•  ๊ฑฐ์•ผ.......

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