CS

[์ž๋ฃŒ๊ตฌ์กฐ] ํŠธ๋ฆฌ(Tree) ์ž๋ฃŒ๊ตฌ์กฐ

meeeeejin 2021. 10. 2. 13:56

 

๋ฆฌ์ŠคํŠธ, ์Šคํƒ, ํ ๋“ฑ์€ ์ž๋ฃŒ๋“ค์ด ์ง์„ ๊ณผ ๊ฐ™์ด ๋‚˜์—ด๋˜์–ด ์žˆ๋Š” ์„ ํ˜• ์ž๋ฃŒ ๊ตฌ์กฐ(linear data structure)์ด๋‹ค. ์ด๋Ÿฐ ์ž๋ฃŒ๊ตฌ์กฐ๋Š” ๊ณ„์ธต ๊ด€๊ณ„๋ฅผ ํ‘œํ˜„ํ•˜๊ธฐ์— ์ ํ•ฉํ•˜์ง€ ์•Š๋‹ค. ํŠธ๋ฆฌ(tree)๋Š” ์กฐ์ƒ๊ณผ ์ž์†, ์ „์ฒด์™€ ๋ถ€๋ถ„, ์ปดํ“จํ„ฐ์˜ ๋””๋ ‰ํ„ฐ๋ฆฌ ๊ตฌ์กฐ ๋“ฑ์˜ ๊ณ„์ธต์ ์ธ ์ž๋ฃŒ๋ฅผ ํ‘œํ˜„ํ•˜๋Š”๋ฐ ์ด์šฉ๋˜๋Š” ์ž๋ฃŒ๊ตฌ์กฐ์ด๋‹ค. 

 

ํŠธ๋ฆฌ(Tree) ์ž๋ฃŒ๊ตฌ์กฐ

๐Ÿ’ก ํŠธ๋ฆฌ์™€ ๊ด€๋ จ๋œ ์šฉ์–ด

  • ๋…ธ๋“œ(node): ํŠธ๋ฆฌ์˜ ๊ตฌ์„ฑ ์š”์†Œ
  • ๋ฃจํŠธ(root) ๋…ธ๋“œ: ๊ณ„์ธต ๊ตฌ์กฐ์—์„œ ๊ฐ€์žฅ ๋†’์€ ๊ณณ์— ์žˆ๋Š” ๋…ธ๋“œ
  • ์„œ๋ธŒ ํŠธ๋ฆฌ(subtree): ํŠธ๋ฆฌ์—์„œ ๋ฃจํŠธ ๋…ธ๋“œ๋ฅผ ์ œ์™ธํ•œ ๋…ธ๋“œ๋“ค
  • ๊ฐ„์„ (edge): ๋ฃจํŠธ์™€ ์„œ๋ธŒ ํŠธ๋ฆฌ๋ฅผ ์—ฐ๊ฒฐํ•˜๋Š” ์„ 
  • ๋‹จ๋ง ๋…ธ๋“œ(terminal node/leaf node): ์ž์‹ ๋…ธ๋“œ๊ฐ€ ์—†๋Š” ๋…ธ๋“œ
  • ๋น„๋‹จ๋ง ๋…ธ๋“œ(nonterminal node): ์ž์‹ ๋…ธ๋“œ๊ฐ€ ์žˆ๋Š” ๋…ธ๋“œ
  • ์ฐจ์ˆ˜(degree): ์–ด๋–ค ๋…ธ๋“œ๊ฐ€ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ์ž์‹ ๋…ธ๋“œ์˜ ๊ฐœ์ˆ˜
  • ํŠธ๋ฆฌ์˜ ์ฐจ์ˆ˜: ํŠธ๋ฆฌ๊ฐ€ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๋…ธ๋“œ์˜ ์ฐจ์ˆ˜ ์ค‘์—์„œ ๊ฐ€์žฅ ํฐ ์ฐจ์ˆ˜
  • ๋ ˆ๋ฒจ(level): ํŠธ๋ฆฌ์˜ ๊ฐ ์ธต์— ๋ฒˆํ˜ธ๋ฅผ ๋งค๊ธด ๊ฒƒ ({A(๋ฃจํŠธ)} ๋ ˆ๋ฒจ 1, {B, C, D}์˜ ๋ ˆ๋ฒจ 2, ...)
  • ํŠธ๋ฆฌ์˜ ๋†’์ด(height): ํŠธ๋ฆฌ๊ฐ€ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ์ตœ๋Œ€ ๋ ˆ๋ฒจ

 

 

 

๐Ÿ’ก ์ด์ง„ ํŠธ๋ฆฌ(Binary Tree)

๋ชจ๋“  ๋…ธ๋“œ๊ฐ€ 2๊ฐœ์˜ ์„œ๋ธŒ ํŠธ๋ฆฌ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ํŠธ๋ฆฌ๋ฅผ ์ด์ง„ ํŠธ๋ฆฌ(binary tree)๋ผ๊ณ  ํ•œ๋‹ค. ์ด๋•Œ ์„œ๋ธŒ ํŠธ๋ฆฌ๋Š” ๊ณต์ง‘ํ•ฉ์ผ ์ˆ˜ ์žˆ๋‹ค. 

 

<์ด์ง„ ํŠธ๋ฆฌ์˜ ์ˆœํ™˜์  ์ •์˜>

  1. ๊ณต์ง‘ํ•ฉ์ด๊ฑฐ๋‚˜
  2. ๋ฃจํŠธ์™€ ์™ผ์ชฝ ์„œ๋ธŒ ํŠธ๋ฆฌ, ์˜ค๋ฅธ์ชฝ ์„œ๋ธŒ ํŠธ๋ฆฌ๋กœ ๊ตฌ์„ฑ๋œ ๋…ธ๋“œ๋“ค์˜ ์œ ํ•œ ์ง‘ํ•ฉ์œผ๋กœ ์ •์˜๋œ๋‹ค. ์ด์ง„ ํŠธ๋ฆฌ์˜ ์„œ๋ฒ„ ํŠธ๋ฆฌ๋“ค์€ ๋ชจ๋‘ ์ด์ง„ ํŠธ๋ฆฌ์—ฌ์•ผ ํ•œ๋‹ค. 

 

 

<์ด์ง„ ํŠธ๋ฆฌ์˜ ์„ฑ์งˆ>

  • n๊ฐœ์˜ ๋…ธ๋“œ๋ฅผ ๊ฐ€์ง„ ์ด์ง„ ํŠธ๋ฆฌ๋Š” (n - 1) ๊ฐœ์˜ ๊ฐ„์„ ์„ ๊ฐ€์ง„๋‹ค. 
    - ์ด์ง„ ํŠธ๋ฆฌ์—์„œ ๋ฃจํŠธ๋ฅผ ์ œ์™ธํ•œ ๋…ธ๋“œ๋Š” ํ•˜๋‚˜์˜ ๋ถ€๋ชจ ๋…ธ๋“œ๋งŒ์„ ๊ฐ€์ง
  • ๋†’์ด๊ฐ€ h์ธ ์ด์ง„ ํŠธ๋ฆฌ์˜ ๋…ธ๋“œ ๊ฐœ์ˆ˜: ์ตœ์†Œ h๊ฐœ / ์ตœ๋Œ€ 2^h - 1๊ฐœ
    - ํ•œ ๋ ˆ๋ฒจ์— ์ ์–ด๋„ ํ•˜๋‚˜์˜ ๋…ธ๋“œ๊ฐ€ ์กด์žฌํ•ด์•ผ ํ•จ
    - ํ•˜๋‚˜์˜ ๋…ธ๋“œ๋Š” ์ตœ๋Œ€ 2๊ฐœ์˜ ์ž์‹์„ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์Œ
    - ๋ ˆ๋ฒจ i์—์„œ ์ตœ๋Œ€ ๋…ธ๋“œ ๊ฐœ์ˆ˜: 2^(i - 1)
  • n๊ฐœ์˜ ๋…ธ๋“œ๋ฅผ ๊ฐ€์ง„ ์ด์ง„ ํŠธ๋ฆฌ์˜ ๋†’์ด: ์ตœ๋Œ€ n / ์ตœ์†Œ โŽกlog(n + 1)โŽค
    - ํ•œ ๋ ˆ๋ฒจ์— ์ ์–ด๋„ ํ•˜๋‚˜์˜ ๋…ธ๋“œ๊ฐ€ ์กด์žฌํ•ด์•ผ ํ•จ
    - ๋†’์ด h์˜ ์ด์ง„ ํŠธ๋ฆฌ๊ฐ€ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋Š” ์ตœ๋Œ“๊ฐ’ n <= 2^h - 1์—์„œ ์–‘๋ณ€์— log๋ฅผ ์ทจํ•˜๋ฉด โŽกlog(n + 1)โŽค <= h

 

 

<์ด์ง„ ํŠธ๋ฆฌ์˜ ๋ถ„๋ฅ˜>

  • ํฌํ™” ์ด์ง„ ํŠธ๋ฆฌ(Full Binary Tree)
    - ํŠธ๋ฆฌ์˜ ๊ฐ ๋ ˆ๋ฒจ์— ๋…ธ๋“œ๊ฐ€ ๊ฝ‰ ์ฐจ ์žˆ๋Š” ์ด์ง„ ํŠธ๋ฆฌ
    - ๋†’์ด๊ฐ€ k์ธ ํฌํ™” ์ด์ง„ ํŠธ๋ฆฌ์˜ ๋…ธ๋“œ ๊ฐœ์ˆ˜: 2^k - 1
  • ์™„์ „ ์ด์ง„ ํŠธ๋ฆฌ(Complete Binary Tree)
    - ๋†’์ด๊ฐ€ k์ผ ๋•Œ, ๋ ˆ๋ฒจ 1๋ถ€ํ„ฐ k - 1๊นŒ์ง€๋Š” ๋…ธ๋“œ๊ฐ€ ๋ชจ๋‘ ์ฑ„์›Œ์ ธ ์žˆ๊ณ  ๋ ˆ๋ฒจ k์—์„œ๋Š” ์™ผ์ชฝ๋ถ€ํ„ฐ ์˜ค๋ฅธ์ชฝ์œผ๋กœ ๋…ธ๋“œ๊ฐ€ ์ˆœ์„œ๋Œ€๋กœ ์ฑ„์›Œ์ง„ ์ด์ง„ ํŠธ๋ฆฌ
    - ํฌํ™” ์ด์ง„ ํŠธ๋ฆฌ๋Š” ํ•ญ์ƒ ์™„์ „ ์ด์ง„ ํŠธ๋ฆฌ์ด์ง€๋งŒ ๊ทธ ์—ญ์€ ํ•ญ์ƒ ์„ฑ๋ฆฝํ•˜์ง€๋Š” ์•Š์Œ

 

 

 

๐Ÿ’ก ์ด์ง„ ํŠธ๋ฆฌ์˜ ์ˆœํšŒ(Traversal)

์ด์ง„ ํŠธ๋ฆฌ์˜ ์ˆœํšŒ๋ž€ ์ด์ง„ ํŠธ๋ฆฌ์— ์†ํ•˜๋Š” ๋ชจ๋“  ๋…ธ๋“œ๋“ค์„ ํ•œ ๋ฒˆ์”ฉ ๋ฐฉ๋ฌธํ•˜์—ฌ ๋…ธ๋“œ๊ฐ€ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๋ชฉ์ ์— ๋งž๊ฒŒ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฒƒ์„ ๋งํ•œ๋‹ค. ์ด์ง„ ํŠธ๋ฆฌ์˜ ์ˆœํšŒ ๋ฐฉ๋ฒ•์€ ํฌ๊ฒŒ 3๊ฐ€์ง€๋กœ ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ๋‹ค. 

  • ์ „์œ„ ์ˆœํšŒ(preorder traversal): VLR
  • ์ค‘์œ„ ์ˆœํšŒ(inorder traversal): LVR
  • ํ›„์œ„ ์ˆœํšŒ(postorder traversal): LRV

 

 

<์ค‘์œ„ ์ˆœํšŒ ์•Œ๊ณ ๋ฆฌ์ฆ˜>

def inorder(root):
	if root:
    	inorder(root.left)	# ์™ผ์ชฝ ์„œ๋ธŒ ํŠธ๋ฆฌ ์ˆœํšŒ
        print(root.data)	# ๋…ธ๋“œ ๋ฐฉ๋ฌธ
        inorder(root.right)	# ์˜ค๋ฅธ์ชฝ ์„œ๋ธŒ ํŠธ๋ฆฌ ์ˆœํšŒ

์ „์œ„ ์ˆœํšŒ์™€ ํ›„์œ„ ์ˆœํšŒ๋„ ๋น„์Šทํ•œ ๋ฐฉ๋ฒ•์œผ๋กœ ์žฌ๊ท€์ ์œผ๋กœ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค. 

 

 

์ด๋ฐ–์—๋„ ๋ ˆ๋ฒจ ์ˆœํšŒ(level order) ๋ฐฉ๋ฒ•์œผ๋กœ ์ด์ง„ ํŠธ๋ฆฌ๋ฅผ ์ˆœํšŒํ•  ์ˆ˜ ์žˆ๋‹ค. ๋ ˆ๋ฒจ ์ˆœํšŒ๋Š” ๊ฐ ๋…ธ๋“œ๋ฅผ ๋ ˆ๋ฒจ ์ˆœ์œผ๋กœ ๊ฒ€์‚ฌํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค. ๋™์ผํ•œ ๋ ˆ๋ฒจ์˜ ๊ฒฝ์šฐ์—๋Š” ์ขŒ์—์„œ ์šฐ๋กœ ๋ฐฉ๋ฌธํ•œ๋‹ค. ์œ„ 3๊ฐ€์ง€ ์ˆœํšŒ ๋ฐฉ๋ฒ•์€ ์Šคํƒ(์žฌ๊ท€ ํ˜ธ์ถœ)์„ ์‚ฌ์šฉํ–ˆ์ง€๋งŒ, ๋ ˆ๋ฒจ ์ˆœํšŒ๋Š” ํ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ˆœํšŒ ๋ฐฉ๋ฒ•์ด๋‹ค. 

 

<๋ ˆ๋ฒจ ์ˆœํšŒ ์•Œ๊ณ ๋ฆฌ์ฆ˜>

from collections import deque

def level_order(root):
	queue = deque.([root])
    while queue:
    	root = queue.popleft()
        if root:
        	print(root.data)	 # ๋…ธ๋“œ ๋ฐฉ๋ฌธ
            if root.left:
            	queue.append(root.left)	 # ์™ผ์ชฝ ์„œ๋ธŒ ํŠธ๋ฆฌ ํ์— ์‚ฝ์ž…
            if root.right:
            	queue.append(root.right) # ์˜ค๋ฅธ์ชฝ ์„œ๋ธŒ ํŠธ๋ฆฌ ํ์— ์‚ฝ์ž…

์ฐธ๊ณ : ํŠธ๋ฆฌ๋Š” ๊ทธ๋ž˜ํ”„์™€ ๋‹ฌ๋ฆฌ ์‚ฌ์ดํด์ด ์—†๊ธฐ ๋•Œ๋ฌธ์— BFS์™€ ๋‹ฌ๋ฆฌ visited๋ฅผ ์ €์žฅํ•  ํ•„์š”๊ฐ€ ์—†์Œ

 

 

 

๐Ÿ’ก ์ด์ง„ ํƒ์ƒ‰ ํŠธ๋ฆฌ(Binary Search Tree)

์ด์ง„ ํƒ์ƒ‰ ํŠธ๋ฆฌ๋Š” ์ด์ง„ ํŠธ๋ฆฌ ๊ธฐ๋ฐ˜์˜ ํƒ์ƒ‰์„ ์œ„ํ•œ ์ž๋ฃŒ๊ตฌ์กฐ์ด๋‹ค. ์ด์ง„ ํƒ์ƒ‰ ํŠธ๋ฆฌ์˜ ์ •์˜๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค. 

  • ๋ชจ๋“  ๋…ธ๋“œ์˜ ํ‚ค๋Š” ์œ ์ผํ•˜๋‹ค
  • ์™ผ์ชฝ ์„œ๋ธŒ ํŠธ๋ฆฌ์˜ ํ‚ค๋“ค์€ ๋ฃจํŠธ์˜ ํ‚ค๋ณด๋‹ค ์ž‘๋‹ค
  • ์˜ค๋ฅธ์ชฝ ์„œ๋ธŒ ํŠธ๋ฆฌ์˜ ํ‚ค๋“ค์€ ๋ฃจํŠธ์˜ ํ‚ค๋ณด๋‹ค ํฌ๋‹ค
  • ์™ผ์ชฝ๊ณผ ์˜ค๋ฅธ์ชฝ ์„œ๋ธŒ ํŠธ๋ฆฌ๋„ ์ด์ง„ ํƒ์ƒ‰ ํŠธ๋ฆฌ์ด๋‹ค

 

 

<์ด์ง„ ํƒ์ƒ‰ ํŠธ๋ฆฌ์˜ search>

์ด์ง„ ํƒ์ƒ‰ ํŠธ๋ฆฌ์—์„œ ํŠน์ • ํ‚ค ๊ฐ’์„ ๊ฐ€์ง„ ๋…ธ๋“œ๋ฅผ ์ฐพ๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋จผ์ € ์ฃผ์–ด์ง„ ํƒ์ƒ‰ ํ‚ค ๊ฐ’๊ณผ ํ˜„์žฌ์˜ ๋ฃจํŠธ ๋…ธ๋“œ์˜ ํ‚ค ๊ฐ’์„ ๋น„๊ตํ•œ๋‹ค. ๋น„๊ต ๊ฒฐ๊ณผ๋Š” ๋‹ค์Œ 3๊ฐ€์ง€๋กœ ๋‚˜๋ˆ„์–ด์ง„๋‹ค. 

  • target == root: ํƒ์ƒ‰ ์ข…๋ฃŒ
  • target < root: ๋ฃจํŠธ์˜ ์™ผ์ชฝ ์ž์‹์„ ๊ธฐ์ค€์œผ๋กœ ์žฌํƒ์ƒ‰
  • target > root: ๋ฃจํŠธ์˜ ์˜ค๋ฅธ์ชฝ ์ž์‹์„ ๊ธฐ์ค€์œผ๋กœ ์žฌํƒ์ƒ‰

 

<์ด์ง„ ํƒ์ƒ‰ ํŠธ๋ฆฌ์˜ insert>

  1. ํŠธ๋ฆฌ T์—์„œ ์‚ฝ์ž…ํ•  ํ‚ค ๊ฐ’ x์— ๋Œ€ํ•œ ํƒ์ƒ‰ ์ˆ˜ํ–‰
  2. ํƒ์ƒ‰์ด ์‹คํŒจํ•˜๋ฉด ํƒ์ƒ‰์ด ๋๋‚œ ์ง€์ ์— ๋…ธ๋“œ x ์‚ฝ์ž…

์ด์ง„ ํƒ์ƒ‰ ํŠธ๋ฆฌ์˜ ํ‚ค ๊ฐ’๋“ค์€ ์œ ์ผํ•ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— x๊ฐ’์— ๋Œ€ํ•œ ํƒ์ƒ‰์— ์„ฑ๊ณตํ–ˆ๋‹ค๋ฉด x๋ฅผ ์ค‘๋ณต ์‚ฝ์ž…ํ•˜์ง€ ๋ชปํ•œ๋‹ค. 

 

 

<์ด์ง„ ํƒ์ƒ‰ ํŠธ๋ฆฌ์˜ delete>

๋…ธ๋“œ๋ฅผ ์‚ญ์ œํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋จผ์ € ๋…ธ๋“œ๋ฅผ ํƒ์ƒ‰ํ•ด์•ผ ํ•œ๋‹ค. ๋…ธ๋“œ๋ฅผ ํƒ์ƒ‰ํ•œ ๋‹ค์Œ, ๋‹ค์Œ 3๊ฐ€์ง€ ๊ฒฝ์šฐ๋ฅผ ๊ณ ๋ คํ•ด์•ผ ํ•œ๋‹ค. 

  1. ์‚ญ์ œํ•˜๋ ค๋Š” ๋…ธ๋“œ x๊ฐ€ ๋‹จ๋ง ๋…ธ๋“œ์ผ ๊ฒฝ์šฐ
    - ๋‹จ๋ง ๋…ธ๋“œ x๋งŒ ์‚ญ์ œ
  2. ์‚ญ์ œํ•˜๋ ค๋Š” ๋…ธ๋“œ x๊ฐ€ ํ•˜๋‚˜์˜ ์„œ๋ธŒ ํŠธ๋ฆฌ(์™ผ์ชฝ ๋˜๋Š” ์˜ค๋ฅธ์ชฝ)๋ฅผ ๊ฐ€์ง„ ๊ฒฝ์šฐ
    - ๋…ธ๋“œ x๋Š” ์‚ญ์ œํ•˜๊ณ , ์„œ๋ธŒ ํŠธ๋ฆฌ๋ฅผ x์˜ ๋ถ€๋ชจ ๋…ธ๋“œ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๊ฒŒ ํ•จ
  3. ์‚ญ์ œํ•˜๋ ค๋Š” ๋…ธ๋“œ x๊ฐ€ ๋‘ ๊ฐœ์˜ ์„œ๋ธŒ ํŠธ๋ฆฌ๋ฅผ ๊ฐ€์ง„ ๊ฒฝ์šฐ
    - x๋ฅผ ์‚ญ์ œํ•˜๊ณ  x์˜ ์ž๋ฆฌ์— ์™ผ์ชฝ ์„œ๋ธŒ ํŠธ๋ฆฌ์—์„œ ๊ฐ€์žฅ ํฐ ๊ฐ’ ๋˜๋Š” ์˜ค๋ฅธ์ชฝ ์„œ๋ธŒ ํŠธ๋ฆฌ์—์„œ ๊ฐ€์žฅ ์ž‘์€ ๊ฐ’์„ ๋„ฃ์Œ

 

 

<์‹œ๊ฐ„ ๋ณต์žก๋„>

์ด์ง„ ํƒ์ƒ‰ ํŠธ๋ฆฌ์—์„œ ํƒ์ƒ‰, ์‚ฝ์ž…, ์‚ญ์ œ ์—ฐ์‚ฐ์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„๋Š” ํŠธ๋ฆฌ์˜ ๋†’์ด๋ฅผ h๋ผ๊ณ  ํ–ˆ์„ ๋•Œ, O(h)์ด๋‹ค. ๋”ฐ๋ผ์„œ n๊ฐœ์˜ ๋…ธ๋“œ๋ฅผ ๊ฐ€์ง€๋Š” ์ด์ง„ ํƒ์ƒ‰ ํŠธ๋ฆฌ์˜ ๊ฒฝ์šฐ ๊ท ํ˜• ์žกํžŒ ์ด์ง„ ํŠธ๋ฆฌ์˜ ๋†’์ด๋Š”โŽกlog(n)โŽค์ด๋ฏ€๋กœ ํ‰๊ท ์˜ ๊ฒฝ์šฐ ์‹œ๊ฐ„ ๋ณต์žก๋„๋Š” O(log(n))์ด๋‹ค. 

ํ•˜์ง€๋งŒ ๋งŒ์•ฝ ํ•œ์ชฝ์œผ๋กœ ์น˜์šฐ์น˜๋Š” ๊ฒฝ์‚ฌ์ง€๋Š” ์ด์ง„ ํŠธ๋ฆฌ์ผ ๊ฒฝ์šฐ์—๋Š” ํŠธ๋ฆฌ์˜ ๋†’์ด๊ฐ€ n์ด ๋˜๊ณ  ์ด๋•Œ์˜ ํƒ์ƒ‰, ์‚ญ์ œ , ์‚ฝ์ž… ์‹œ๊ฐ„์€ O(n)์œผ๋กœ ์„ ํ˜• ํƒ์ƒ‰๊ณผ ์œ ์‚ฌํ•˜๋‹ค. 

 

 

 

Reference

 

 

 

728x90