0827 TIL BFS, DFS

๋ƒํ•˜ํ˜ธํ›„ยท2021๋…„ 8์›” 26์ผ
0

TIL

๋ชฉ๋ก ๋ณด๊ธฐ
32/101

BFS๋Š” ๋„ˆ๋น„์šฐ์„ ํƒ์ƒ‰ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋‹ค.
์ฃผ๋กœ Queue์™€ while๋ฌธ๊ณผ ํ•จ๊ป˜ ์‚ฌ์šฉํ•œ๋‹ค.

์žฅ์ :
1. ๋„ˆ๋น„๋ฅผ ์šฐ์„ ์œผ๋กœ ํƒ์ƒ‰ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋‹ต์ด ๋˜๋Š” ๊ฒฝ๋กœ๊ฐ€ ์—ฌ๋Ÿฌ ๊ฐœ์ธ ๊ฒฝ์šฐ์—๋„ ์ตœ๋‹จ ๊ฒฝ๋กœ์ž„์„ ๋ณด์žฅํ•œ๋‹ค.
2. ์ตœ๋‹จ ๊ฒฝ๋กœ๊ฐ€ ์กด์žฌํ•œ๋‹ค๋ฉด, ์–ด๋Š ํ•œ ๊ฒฝ๋กœ๊ฐ€ ๋ฌดํ•œํžˆ ๊นŠ์–ด์ง„๋‹ค ํ•ด๋„ ์ตœ๋‹จ ๊ฒฝ๋กœ๋ฅผ ๋ฐ˜๋“œ์‹œ ์ฐพ์„ ์ˆ˜ ์žˆ๋‹ค.
3. ๋…ธ๋“œ ์ˆ˜๊ฐ€ ์ ๊ณ  ๊นŠ์ด๊ฐ€ ์–•์€ ํ•ด๊ฐ€ ์กด์žฌ ํ•  ๋•Œ ์œ ๋ฆฌํ•˜๋‹ค.

๋‹จ์ :
1. ํ๋ฅผ ์ด์šฉํ•ด ๋‹ค์Œ์— ํƒ์ƒ‰ ํ•  ๋…ธ๋“œ๋“ค์„ ์ €์žฅํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋…ธ๋“œ์˜ ์ˆ˜๊ฐ€ ๋งŽ์„ ์ˆ˜๋ก ํ•„์š”์—†๋Š” ๋…ธ๋“œ๋“ค๊นŒ์ง€ ์ €์žฅํ•ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋” ํฐ ์ €์žฅ๊ณต๊ฐ„์ด ํ•„์š”ํ•˜๋‹ค.
2.๋…ธ๋“œ์˜ ์ˆ˜๊ฐ€ ๋Š˜์–ด๋‚˜๋ฉด ํƒ์ƒ‰ํ•ด์•ผํ•˜๋Š” ๋…ธ๋“œ๊ฐ€ ๋งŽ์•„์ง€๊ธฐ ๋•Œ๋ฌธ์— ๋น„ํšจ์œจ์ ์ด๋‹ค.

DFS๋Š” ๊นŠ์ด์šฐ์„ ํƒ์ƒ‰ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋‹ค.
์ฃผ๋กœ Stack๊ณผ ์žฌ๊ท€ํ˜ธ์ถœ์„ ์‚ฌ์šฉํ•œ๋‹ค.

์žฅ์ :
1. BFS์— ๋น„ํ•ด ์ €์žฅ๊ณต๊ฐ„์˜ ํ•„์š”์„ฑ์ด ์ ๋‹ค. ๋ฐฑํŠธ๋ž˜ํ‚น์„ ํ•ด์•ผํ•˜๋Š” ๋…ธ๋“œ๋“ค๋งŒ ์ €์žฅํ•ด์ฃผ๋ฉด ๋œ๋‹ค.
2. ์ฐพ์•„์•ผํ•˜๋Š” ๋…ธ๋“œ๊ฐ€ ๊นŠ์€ ๋‹จ๊ณ„์— ์žˆ์„ ์ˆ˜๋ก, ๊ทธ ๋…ธ๋“œ๊ฐ€ ์™ผ์ชฝ์— ์žˆ์„ ์ˆ˜๋ก BFS๋ณด๋‹ค ์œ ๋ฆฌํ•˜๋‹ค.

๋‹จ์ :
1. ๋‹ต์ด ์•„๋‹Œ ๊ฒฝ๋กœ๊ฐ€ ๋งค์šฐ ๊นŠ๋‹ค๋ฉด, ๊ทธ ๊ฒฝ๋กœ์— ๊นŠ์ด ๋น ์งˆ ์šฐ๋ ค๊ฐ€ ์žˆ๋‹ค.
2. ์ฐพ์€ ํ•ด๊ฐ€ ์ตœ๋‹จ ๊ฒฝ๋กœ๋ผ๋Š” ๋ณด์žฅ์ด ์—†๋‹ค.

๐Ÿ™†โ€โ™€๏ธArray.prototype์—๋Š” Stack, Queue ์‚ฌ์šฉ์„ ์œ„ํ•ด ์–ด๋–ค ๋ฉ”์„œ๋“œ๊ฐ€ ์กด์žฌํ•˜๋‚˜์š”?

Stack : Array.prototype.push(),Array.prototype.pop()
Queue :Array.prototype.push(), Array.prototype.shift()

๊ท ํ˜• ์ด์ง„ ํƒ์ƒ‰ ํŠธ๋ฆฌ๋ž€ ๋ฌด์—‡์ผ๊นŒ์š”?

AVL Tree ๊ธฐ์กด ์ด์ง„ํƒ์ƒ‰ํŠธ๋ฆฌ์—์„œ ์น˜์šฐ์ณ์ง์„ ๋ฐฉ์ง€ํ•ด ๊ท ํ˜•์„ ๋งž๊ฒŒํ•˜๋Š” ์ผ์ข…์˜ ํŠธ๋ฆญ์„ ๋„ฃ์€ ๊ตฌ์กฐ์ด๋‹ค.
์ด์ง„ ํƒ์ƒ‰ ํŠธ๋ฆฌ์˜ ๊ท ํ˜•ํŒ ๋ฒ„์ „์ด๋‹ค.
BF(Balance Factor)๋ฅผ ์œ ์ €๊ฐ€ ์„ค์ •ํ•ด๋‘์–ด ํŠธ๋ฆฌ๋‚ด ์„œ๋ธŒํŠธ๋ฆฌ๊ฐ„์˜ ๋†’์ด ์ฐจ์ด๊ฐ€ BF๋ฅผ ์•ˆ๋„˜๊ฒŒ ์ˆ˜์‹œ๋กœ ์กฐ์ •ํ•œ๋‹ค.
์‚ฝ์ž…์˜ ๊ฒฝ์šฐ 4๊ฐ€์ง€ ์ผ€์ด์Šค(LL, RR, LR, RL) ๋กœ ๋‚˜๋ˆ„์–ด, 'ํšŒ์ „' ์ด๋ผ๋Š” ๊ฐœ๋…์œผ๋กœ ํŠธ๋ฆฌ ๊ท ํ˜•์„ ์œ ์ง€ํ•œ๋‹ค.

3๊ฐ€์ง€ ํŠธ๋ฆฌ ์ˆœํšŒ๋ฐฉ์‹ (DFS)

      (1)
     /   \
   (2)   (3)
  /  \      
(4)  (5)

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

  1. root
  2. left
  3. right

๊ฒฐ๊ณผ : 4 2 5 1 3

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

  1. left
  2. root
  3. right

๊ฒฐ๊ณผ : 1 2 4 5 3

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

  1. left
  2. right
  3. root

๊ฒฐ๊ณผ : 4 5 2 3 1

๊ทธ์™ธ

Array์˜ ์š”์†Œ๋ฅผ swapํ•˜๋Š” ๋ฐฉ๋ฒ•

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—๋Š” ๋ณ„๋„์˜ swap๋ฉ”์†Œ๋“œ๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์— ์ง์ ‘ ์‚ฌ์šฉํ•ด์•ผํ•œ๋‹ค.

  1. temp ๋ณ€์ˆ˜ ์‚ฌ์šฉ
const arr = [1,2,3,4,5]

let temp = arr[1]
arr[1] = arr[2]
arr[2] = temp

console.log(arr) //[1,3,2,4,5]
  1. ๊ตฌ์กฐ๋ถ„ํ•ดํ• ๋‹น ์‚ฌ์šฉ
const arr = [1,2,3,4,5]
[arr[1], arr[2], arr[4]] = [arr[2],arr[4],arr[1]]
                            
console.log(arr) //[1,3,5,4,2]

๋Š๋‚€์ 

์–ด์ œ ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ์ฒ˜์Œ ๋ดค์„๋•Œ๋ณด๋‹ค๋Š” ์กฐ๊ธˆ ์ดํ•ดํ•˜๊ธฐ๊ฐ€ ์ˆ˜์›”ํ•ด์กŒ๋‹ค. ๊ณ„์†ํ•ด์„œ ๋ฐ˜๋ณตํ•˜๋ฉด ์ž˜ ์ดํ•ดํ•˜๊ฒ ์ง€ ใ…Ž ์ฃผ๋ง๋™์•ˆ ๊ณ„์† ๋ณต์Šตํ•˜๋ฉด ์˜ค๋Š˜๋ณด๋‹ค ๋” ์ดํ•ด๋ฅผ ์ž˜ ํ•˜๊ฒŒ๋  ๊ฒƒ๊ฐ™๋‹ค. ์•ˆ๋˜๋ฉด ๋ ๋•Œ๊นŒ์ง€ ๋ฐ˜๋ณตํ•˜์ž!

profile
DONE is better than PERFECT

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