๐ŸŒˆ [Section2] 5. ์ž๋ฃŒ๊ตฌ์กฐ3

ํ˜„์ฃผยท2022๋…„ 9์›” 26์ผ
0

bootcamp

๋ชฉ๋ก ๋ณด๊ธฐ
24/71

๐Ÿ“• ์˜ค๋Š˜ ๋ฐฐ์šด ๋‚ด์šฉ!

  • ํŠธ๋ฆฌ ์ˆœํšŒ (Tree traversal)
  • ๊ทธ๋ž˜ํ”„ ํƒ์ƒ‰
  • ์ถ”๊ฐ€ ๊ณต๋ถ€

โœ๏ธ ํŠธ๋ฆฌ ์ˆœํšŒ (Tree traversal)

  • ํŠน์ • ๋ชฉ์ ์„ ์œ„ํ•ด ํŠธ๋ฆฌ์˜ ๋ชจ๋“  ๋…ธ๋“œ๋ฅผ ํ•œ ๋ฒˆ์”ฉ ๋ฐฉ๋ฌธํ•˜๋Š” ๊ฒƒ
    ( ์ˆœ์„œ๋Š” ํ•ญ์ƒ ์™ผ์ชฝ โžœ ์˜ค๋ฅธ์ชฝ )

1. ์ „์œ„ ์ˆœํšŒ (preorder traverse)

โžœ ๋ฃจํŠธ ๋…ธ๋“œ -> ์™ผ์ชฝ ์ž์‹ ๋…ธ๋“œ -> ์˜ค๋ฅธ์ชฝ ์ž์‹ ์ˆœ์„œ

2. ์ค‘์œ„ ์ˆœํšŒ (inorder traverse)

โžœ ์™ผ์ชฝ ์ž์‹ -> ๋ฃจํŠธ ๋…ธ๋“œ -> ์˜ค๋ฅธ์ชฝ ์ž์‹ ์ˆœ์„œ

3. ํ›„์œ„ ์ˆœํšŒ (postorder traverse)

โžœ ๋ฃจํŠธ ๋…ธ๋“œ -> ์™ผ์ชฝ ์ž์‹ ๋…ธ๋“œ -> ์˜ค๋ฅธ์ชฝ ์ž์‹ ์ˆœ์„œ


โœ๏ธ ๊ทธ๋ž˜ํ”„ ํƒ์ƒ‰

  • ํ•˜๋‚˜์˜ ์ •์ ์—์„œ ์‹œ์ž‘ํ•˜์—ฌ ๊ทธ๋ž˜ํ”„์˜ ๋ชจ๋“  ์ •์ ๋“ค์„ ํ•œ ๋ฒˆ์”ฉ ๋ฐฉ๋ฌธ(ํƒ์ƒ‰)ํ•˜๋Š” ๊ฒƒ์ด ๋ชฉ์ 
    ( ๊ทธ๋ž˜ํ”„์˜ ๋ฐ์ดํ„ฐ๋Š” ๋ฐฐ์—ด์ฒ˜๋Ÿผ ์ •๋ ฌ์ด ๋˜์–ด ์žˆ์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ํ•˜๋‚˜์”ฉ ๋ชจ๋‘ ๋ฐฉ๋ฌธํ•˜์—ฌ ์ฐพ์•„์•ผํ•จ )

โžœ ๊ฐ€๊นŒ์šด ์ ๋ถ€ํ„ฐ ๋ชจ๋‘ ํƒ์ƒ‰ ํ›„, ๊ทธ ๋‹ค์Œ์œผ๋กœ ๊ฐ€๊นŒ์šด ์  ํƒ์ƒ‰
โžœ ๋‘ ์ •์  ์‚ฌ์ด์˜ ์ตœ๋‹จ ๊ฒฝ๋กœ๋ฅผ ์ฐพ์„ ๋•Œ ์‚ฌ์šฉ
โžœ ๊ฒ€์ƒ‰ ๋Œ€์ƒ์˜ ๊ทœ๋ชจ๊ฐ€ ํฌ์ง€ ์•Š๊ณ , ๊ฒ€์ƒ‰ ์‹œ์ž‘ ์ง€์ ์œผ๋กœ๋ถ€ํ„ฐ ์›ํ•˜๋Š” ๋Œ€์ƒ์ด ๋ณ„๋กœ ๋ฉ€์ง€ ์•Š๋‹ค๋ฉด ์‚ฌ์šฉ
Ex. ์ตœ๋‹จ๊ฑฐ๋ฆฌ ์ฐพ์„ ๋•Œ
โžœ ๊ฒ€์ƒ‰ ์†๋„ ์ž์ฒด๋Š” DFS์— ๋น„ํ•ด ๋” ๋น ๋ฆ„
โžœ ๋ณดํ†ต Queue๋ฅผ ์ด์šฉํ•ด ๋ฌธ์ œ ํ’ˆ

โžœ ํ•˜๋‚˜์˜ ๊ฒฝ๋กœ๋ฅผ ๋๊นŒ์ง€ ํƒ์ƒ‰ ํ›„, ๋‹ค์Œ ๊ฒฝ๋กœ๋กœ ๋„˜์–ด๊ฐ€ ํƒ์ƒ‰
โžœ ๊ฒ€์ƒ‰ ๋Œ€์ƒ ๊ทธ๋ž˜ํ”„๊ฐ€ ์ •๋ง ํฌ๋‹ค๋ฉด ์‚ฌ์šฉ
โžœ ๊ฐ๊ฐ์˜ ๊ฒฝ๋กœ๋งˆ๋‹ค ํŠน์ง•์„ ์ €์žฅํ•ด๋‘ฌ์•ผ ํ•  ๋•Œ, ์ค‘๊ฐ„์— ์žฅ์• ๋ฌผ์ด ์žˆ์„ ๋•Œ ์‚ฌ์šฉ (BFS๋Š” ๊ฒฝ๋กœ์˜ ํŠน์ง•์„ ๊ฐ€์ง€์ง€ ๋ชปํ•จ)
โžœ ๋ณดํ†ต Stack์ด๋‚˜ ์žฌ๊ท€๋ฅผ ์ด์šฉํ•ด ๋ฌธ์ œ ํ’ˆ
(Stack์˜ ๊ฒฝ์šฐ ๋ฐ์ดํ„ฐ๊ฐ€ ์Œ“์—ฌ์žˆ์„ ๋•Œ ๋ง‰ํžˆ๋ฉด ๊ทธ๊ฑฐ ์—†์• ๊ณ  ๋‹ค๋ฅธ ๊ฒฝ๋กœ ๋‹ค์‹œ ์Œ“์Œ)
(์žฌ๊ท€์˜ ๊ฒฝ์šฐ ์žฅ์• ๋ฌผ์— ๋ง‰ํžˆ๋ฉด ์ด์ „ ์žฌ๊ท€ํ˜ธ์ถœ ์‹œ์ ์œผ๋กœ ๋Œ์•„๊ฐ€์„œ ๊ฒฝ๋กœ ์ฐพ์Œ)


โœ๏ธ ์ถ”๊ฐ€ ํ•™์Šต

โœ”๏ธ Deque (Double Ended Queue)

  • ์–‘๋ฐฉํ–ฅ์œผ๋กœ ์—ด๋ ค์žˆ๋Š” ๊ตฌ์กฐ

  • Queue์™€ ๋น„์Šทํ•œ ๋ชจ์Šต์„ ๊ฐ€์ง€๊ณ  ์žˆ๊ณ  Stack๊ณผ Queue์˜ ํŠน์ง•์„ ๋ชจ๋‘ ๊ฐ€์ง
    โžœ ์–ด๋Š ์ชฝ์—์„œ๋„ ๋“ค์–ด๊ฐ€๊ณ  ๋‚˜๊ฐˆ ์ˆ˜ ์žˆ์Œ !
    ( ์•ž์—์„œ In ํ–ˆ์„ ๋•Œ, ๊ฐ™์€ ๋ฐฉํ–ฅ์œผ๋กœ Out ํ•œ๋‹ค๋ฉด Stack๊ณผ ๊ฐ™์€ ๊ตฌ์กฐ / ๋‹ค๋ฅธ ๋ฐฉํ–ฅ์œผ๋กœ Out ํ•œ๋‹ค๋ฉด Queue์™€ ๊ฐ™์€ ๊ตฌ์กฐ ( Out ๋จผ์ € ํ–ˆ์„ ๋•Œ๋„ ๊ฐ™์Œ ))

  • ์–‘๋ฐฉํ–ฅ ๋์—์„œ ๋ฐ์ดํ„ฐ ์ถ”๊ฐ€, ์‚ญ์ œ๊ฐ€ ์šฉ์ด
    โžœ ์–‘๋ฐฉํ–ฅ ๋์ด ์•„๋‹Œ ์ž„์˜์˜ ๋ฐ์ดํ„ฐ๋งŒ ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜ ์‚ญ์ œํ•˜๋Š” ๊ฑด ๋ถˆ๊ฐ€๋Šฅ

โœ”๏ธ ๋ฐฐ์—ด๊ณผ Linked List

1) ๋ฐฐ์—ด

  • ์—ฐ์†๋œ ๊ณต๊ฐ„ ์•ˆ์— ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ฐจ์ง€

  • ๋ฉ”๋ชจ๋ฆฌ ์ค‘๊ฐ„์— ๋ฐ์ดํ„ฐ๋ฅผ ๋„ฃ์œผ๋ ค๋ฉด ๊ทธ ๋’ค์˜ ๋ฐ์ดํ„ฐ๋“ค์ด ๋ชจ๋‘ ํ•œ์นธ์”ฉ ๋’ค๋กœ ์ด๋™ํ•ด์•ผํ•จ

2) Linked List

  • ํฉ์–ด์ ธ ์žˆ๋Š” ๊ณต๊ฐ„์— ๋…ธ๋“œ๋“ค์˜ ์—ฐ๊ฒฐ (๋ชจ๋“  ๋…ธ๋“œ๊ฐ€ ์„œ๋กœ์˜ ์ฃผ์†Œ๊ฐ’๋“ค๋กœ ์—ฐ๊ฒฐ)

  • ์ง์ ‘ ์ฃผ์†Œ๊ฐ’์„ ๊ฐ€์ง€๊ณ  ์žˆ์–ด์•ผ ๋‹ค์Œ ๋…ธ๋“œ๋กœ ์ ‘๊ทผ ๊ฐ€๋Šฅ
    โžœ ๋…ธ๋“œ๊ฐ’ ์ฐพ์œผ๋ ค๋ฉด ์ „์ฒด ์ˆœํšŒํ•ด์•ผํ•จ
    ( ๋ฉ”๋ชจ๋ฆฌ์— ํฉ์–ด์ ธ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์‰ฝ๊ฒŒ ์ ‘๊ทผ ๋ถˆ๊ฐ€ )
    ( ์ˆœํšŒ ์ „๊นŒ์ง€๋Š” ์ฒซ๋ฒˆ์งธ ๋…ธ๋“œ์ธ head node์˜ ์ •๋ณด๋งŒ ์•Œ๊ณ , ์ „๋ถ€ ์ˆœํšŒํ•ด์•ผ ๋งˆ์ง€๋ง‰ ์š”์†Œ ํ™•์ธ ๊ฐ€๋Šฅ )

  • ๋งˆ์ง€๋ง‰ ๋…ธ๋“œ๋Š” ๊ฐ€๋ฆฌํ‚ฌ ๊ณณ์ด ์—†์–ด null ๊ฐ€๋ฆฌํ‚ด

  • ๋…ธ๋“œ์˜ ์ถ”๊ฐ€/์‚ญ์ œ๊ฐ€ ๋น ๋ฅด๊ณ  ์‰ฌ์›€
    ( ๋„ฃ์„ ์œ„์น˜ ์•ž ๋’ค ๋…ธ๋“œ์˜ ์ฃผ์†Œ๊ฐ’์„ ํ•ด๋‹น ๋…ธ๋“œ์˜ ์ฃผ์†Œ๊ฐ’์œผ๋กœ ๋ณ€๊ฒจํ•˜๊ธฐ๋งŒ ํ•ด์ฃผ๋ฉด ๊ฐ€๋Šฅ )

โœ”๏ธ Hash Table

  • ํ•ด์‹œํ•จ์ˆ˜(hash function)๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ณ€ํ™˜ํ•œ ํ•ด์‹œ(hash)๋ฅผ ์ƒ‰์ธ(index)์œผ๋กœ ์‚ผ์•„ ํ‚ค(key)์™€ ๋ฐ์ดํ„ฐ(value)๋ฅผ ์ €์žฅํ•˜๋Š” ์ž๋ฃŒ๊ตฌ์กฐ
    ( ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ์˜ ํ‚ค(key)๋ฅผ ํ•ด์‹œํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•ด ๋ณ„๋„์˜ ํ•ด์‹œ(hash)๋กœ ๋ฐ”๊ฟ” ์ฃผ๊ณ , ํ•ด๋‹นํ•˜๋Š” ๋ฐ์ดํ„ฐ(value)๋ฅผ ํ•จ๊ป˜ ์ €์žฅ )

  • ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค๋ฃจ๋Š” ์ž‘์—…์ด ๋งค์šฐ ๋น ๋ฆ„

  • ํ•ด์‹œ ์ถฉ๋Œ ๋ฐœ์ƒ ๊ฐ€๋Šฅ์„ฑ ์žˆ์Œ / ๋ฐ์ดํ„ฐ ์ €์žฅ ์ „ ๋ฏธ๋ฆฌ ๊ณต๊ฐ„ ๋งŒ๋“ค์–ด๋†”์•ผ ํ•จ
    โžœ ๊ณต๊ฐ„ ํšจ์œจ์„ฑ ๋–จ์–ด์ง

  • ํ•ด์‹œ ํ•จ์ˆ˜๊ฐ€ ๋ณต์žกํ•  ๊ฒฝ์šฐ ํ•ด์‹œ๊ฐ’ ๋งŒ๋“ค์–ด๋‚ด๋Š” ๋ฐ ๋งŽ์€ ์‹œ๊ฐ„ ์†Œ์š”

โœ” Hash Table ๊ตฌ์กฐ

  • ํ‚ค(key)์™€ ํ•ด์‹œํ•จ์ˆ˜(hash function), ํ•ด์‹œ(hash), ๋ฐ์ดํ„ฐ(value)๋กœ ์ด๋ฃจ์–ด์ง

    ํ‚ค(key)
    โžœ ํ•ด์‹œ ํ•จ์ˆ˜์˜ ์ž…๋ ฅ๊ฐ’์ธ ๊ณ ์œ ํ•œ ๊ฐ’ ( ๋‹ค์–‘ํ•œ ๊ธธ์ด์˜ ๊ฐ’์ด ๋“ค์–ด์˜ฌ ์ˆ˜ ์žˆ์Œ )
    โžœ ํ•ด์‹œ ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด ๋ณ€ํ™˜ํ•˜์ง€ ์•Š์€ ์ƒํƒœ๋กœ ์ €์žฅ์†Œ์— ์ €์žฅ์ด ๋˜๋ฉด ๋‹ค์–‘ํ•œ ๊ธธ์ด๋งŒํผ์˜ ์ €์žฅ์†Œ๋ฅผ ๊ตฌ์„ฑํ•ด ๋‘์–ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํ•ด์‹œ ํ•จ์ˆ˜๋กœ ๊ฐ’์„ ๋ฐ”๊พธ์–ด ์ €์žฅ
    โ €
    ํ•ด์‹œํ•จ์ˆ˜(hash Function)
    โžœ ํ‚ค(key)๋ฅผ ํ•ด์‹œ(hash)๋กœ ๋ฐ”๊ฟ”์ฃผ๋Š” ์—ญํ• 
    โžœ ๋‹ค์–‘ํ•œ ๊ธธ์ด๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ํ‚ค(key)๋ฅผ ์ผ์ •ํ•œ ๊ธธ์ด๋ฅผ ๊ฐ€์ง€๋Š” ํ•ด์‹œ(hash)๋กœ ๋ณ€๊ฒฝํ•˜์—ฌ ์ €์žฅ์†Œ๋ฅผ ํšจ์œจ์ ์œผ๋กœ ์šด์˜ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์คŒ
    โžœ ํ•ด์‹œ ์ถฉ๋Œ์„ ์ผ์œผํ‚ค๋Š” ํ™•๋ฅ ์„ ์ตœ๋Œ€ํ•œ ์ค„์ด๋Š” ๊ฒƒ์ด ์ค‘์š”
    ( ํ•ด์‹œ ์ถฉ๋Œ(hash Collision) - ์„œ๋กœ ๋‹ค๋ฅธ ํ‚ค(key)๊ฐ€ ๊ฐ™์€ ํ•ด์‹œ(hash)๊ฐ€ ๋˜๋Š” ๊ฒฝ์šฐ )
    โ €
    ํ•ด์‹œ(hash)
    โžœ ํ‚ค(key)๋ฅผ ํ•ด์‹œํ•จ์ˆ˜(hash function)๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋งŒ๋“ค์–ด์ง„ ๊ฒฐ๊ณผ๋ฌผ
    โžœ ์ €์žฅ์†Œ์—์„œ ๋ฐ์ดํ„ฐ(value)์™€ ๋งค์นญ๋˜์–ด ์ €์žฅ ๋ณ€ํ™˜๋œ ๊ฐ’์„ ๋ฐฐ์—ด์˜ ์ƒ‰์ธ(index)๊ณผ ๊ฐ™์ด ์‚ฌ์šฉ
    โ €
    ๋ฐ์ดํ„ฐ(value)
    โžœ ์ €์žฅ์†Œ์— ์ตœ์ข…์ ์œผ๋กœ ์ €์žฅ๋˜๋Š” ๊ฐ’
    โžœ ์ƒ‰์ธ(index)๊ณผ ๋งค์นญ๋˜์–ด ์ €์žฅ

[์ฐธ๊ณ ] https://www.cs.usfca.edu/~galles/visualization/Algorithms.html
( ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ๋ฉ”๋ชจ๋ฆฌ์— ์–ด๋–ป๊ฒŒ ์ €์žฅ๋˜๊ณ  ์ƒ์„ฑ๋˜๋Š”์ง€ ๋ˆˆ์œผ๋กœ ๋ณผ ์ˆ˜ ์žˆ๋Š” ์‚ฌ์ดํŠธ! )


๐ŸŒˆ ๋Š๋‚€์ 

์‚ฌ์‹ค ๊ฐœ๋…์ ์œผ๋กœ๋Š” ๊ดœ์ฐฎ๋‹ค ๋ฌธ์ œ์— ์‘์šฉํ•˜๊ธฐ ์–ด๋ ค์šธ ๋ฟ!!
Section2๋˜๊ณ  ๋‚˜์„œ ์ปจํ…์ธ ๊ฐ€ ๋ญ”๊ฐ€ ๊ฐœ๋…๋งŒ ์„ค๋ช…์ด ๋˜์–ด์žˆ๊ณ  ์–ด๋–ป๊ฒŒ ์‘์šฉํ•˜๋Š”์ง€๋Š” ๋‚˜์™€์žˆ์ง€ ์•Š์•„์„œ ์ง์ ‘ ํ•˜๋‚˜ํ•˜๋‚˜ ๋‹ค ์ฐพ์•„๋ณด๋ฉฐ ํ•™์Šต์„ ํ•ด์•ผํ•˜๋Š” ๊ฒƒ ๊ฐ™๋‹คใ… 
๊ฐœ๋…์— ๋น„ํ•ด ๋ฌธ์ œ ๋‚œ์ด๋„๊ฐ€ ๋„ˆ๋ฌด ์–ด๋ ต๋‹ค๊ตฌ์—ฌใ… ใ…  ์–ด๋–ป๊ฒŒ ํ‘ธ๋Š”์ง€ ๊ฐ์„ ์žก์œผ๋ฉด ๊ดœ์ฐฎ์€๋ฐ
๊ทธ๋Ÿฐ ์˜ˆ์ œ๋“ค์ด ์—†์œผ๋‹ˆ ๊ฐ์„ ์žก๊ธฐ๊ฐ€ ์‰ฝ์ง€ ์•Š๋‹ค,,
๊ทธ๋ž˜๋„ ์˜ค๋Š˜์€ ์–ด์ œ๋ณด๋‹ค ์ข€ ๋” ๋นจ๋ฆฌ ์ดํ•ดํ–ˆ๋‹ค! ๊ทธ๋ž˜๋„ ๋ฌธ์ œ๋ฅผ ํ’€ ๋•Œ์— ๊ทธ๋ž˜ํ”„๋ฅผ ์–ด๋–ป๊ฒŒ ํ™œ์šฉํ•˜๋Š”์ง€์— ๋Œ€ํ•œ ํฐ ํ‹€์€ ๊ฐ์ด ์žกํžŒ ๊ฒƒ ๊ฐ™๋‹ค ใ…Žใ…Ž

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