ํธ๋ฆฌ(6)
-
[BOJ] #2250 - ํธ๋ฆฌ์ ๋์ด์ ๋๋น
2250๋ฒ: ํธ๋ฆฌ์ ๋์ด์ ๋๋น ์ฒซ์งธ ์ค์ ๋ ธ๋์ ๊ฐ์๋ฅผ ๋ํ๋ด๋ ์ ์ N(1 ≤ N ≤ 10,000)์ด ์ฃผ์ด์ง๋ค. ๋ค์ N๊ฐ์ ์ค์๋ ๊ฐ ์ค๋ง๋ค ๋ ธ๋ ๋ฒํธ์ ํด๋น ๋ ธ๋์ ์ผ์ชฝ ์์ ๋ ธ๋์ ์ค๋ฅธ์ชฝ ์์ ๋ ธ๋์ ๋ฒํธ๊ฐ ์์๋๋ก ์ฃผ์ด์ง๋ค. www.acmicpc.net ** ๋ฌธ์ ์ ํ ํธ๋ฆฌ, ๊ตฌํ ** ํ์ด ์ค์ ์ํ๋ฅผ ์ด์ฉํ๋ฉด x์ถ์ ๊ธฐ์ค์ผ๋ก ์ผ์ชฝ๋ถํฐ ๋ฐฉ๋ฌธํ๋ค๋ ํน์ง์ด ์์ ์ค์ ์ํ ์๊ณ ๋ฆฌ์ฆ์ ์ด์ฉํ๊ณ , ์ถ๊ฐ์ ์ผ๋ก level ๊ฐ์ ์ ์ฅํ๋๋ก ํ์ฌ ๋ฌธ์ ํด๊ฒฐ ๊ฐ๋ฅ class Node: def __init__(self, number, left_node, right_node): self.parent = -1 # ๋ถ๋ชจ๊ฐ ์กด์ฌํ๋์ง ํ์ธ, ์์ผ๋ฉด ๋ฃจํธ self.number = number self.left_node..
2021.06.18 -
[BOJ] #1991 - ํธ๋ฆฌ ์ํ
1991๋ฒ: ํธ๋ฆฌ ์ํ ์ฒซ์งธ ์ค์๋ ์ด์ง ํธ๋ฆฌ์ ๋ ธ๋์ ๊ฐ์ N(1≤N≤26)์ด ์ฃผ์ด์ง๋ค. ๋์งธ ์ค๋ถํฐ N๊ฐ์ ์ค์ ๊ฑธ์ณ ๊ฐ ๋ ธ๋์ ๊ทธ์ ์ผ์ชฝ ์์ ๋ ธ๋, ์ค๋ฅธ์ชฝ ์์ ๋ ธ๋๊ฐ ์ฃผ์ด์ง๋ค. ๋ ธ๋์ ์ด๋ฆ์ A๋ถํฐ ์ฐจ๋ก๋๋ก ์๋ฌธ์ www.acmicpc.net ** ๋ฌธ์ ์ ํ ํธ๋ฆฌ, ๊ตฌํ ** ํ์ด ์ ์ ์ํ: ๋ฃจํธ -> ์ผ์ชฝ ์์ -> ์ค๋ฅธ์ชฝ ์์ ์ค์ ์ํ: ์ผ์ชฝ ์์ -> ๋ฃจํธ -> ์ค๋ฅธ์ชฝ ์์ ํ์ ์ํ: ์ผ์ชฝ ์์ -> ์ค๋ฅธ์ชฝ ์์ -> ๋ฃจํธ class Node: def __init__(self, data, left_node, right_node): self.data = data self.left_node = left_node self.right_node = right_node def pre_order(..
2021.06.18 -
[์๋ฃ๊ตฌ์กฐ] #7_4 ํธ๋ฆฌ
** ์ด์ง ํ์ ํธ๋ฆฌ์ ์๊ฐ๋ณต์ก๋ ํธ๋ฆฌ์ ๋์ด(Depth)๋ฅผ h๋ผ๊ณ ํ๋ฉด, ์ด์ง ํ์ ํธ๋ฆฌ์ ์๊ฐ๋ณต์ก๋๋ O(h) n๊ฐ์ ๋ ธ๋๋ฅผ ๊ฐ์ง๋ค๋ฉด, h = log(n) ์ ๊ฐ๊น๊ธฐ ๋๋ฌธ์, ์๊ฐ๋ณต์ก๋๋ O(log(n)) ๋์์ ํ๋ฒ ์คํ ํ ๋๋ง๋ค ๊ฐ๋ฅํ ์ ํ์ง๊ฐ ๋ฐ์ผ๋ก ์ค์ฌ์ง๊ธฐ ๋๋ฌธ์, ์คํ์๊ฐ ์ญ์ ๋ฐ์ผ๋ก ๋จ์ถ์ํฌ ์ ์๋ค๋ ๊ฒ์ ์๋ฏธํ๋ค. ** ์ด์ง ํ์ ํธ๋ฆฌ์ ๋จ์ ํธ๋ฆฌ๊ฐ ๊ท ํ ์กํ ์์ ๊ฒฝ์ฐ, ํ๊ท ์๊ฐ๋ณต์ก๋ O(log(n)) ์ต์ ์ ๊ฒฝ์ฐ, ๋งํฌ๋ ๋ฆฌ์คํธ์ ๋์ผํ ์ฑ๋ฅ์ ๊ฐ๊ฒ ๋๊ณ ์๊ฐ๋ณต์ก๋๋ O(n)
2021.05.30 -
[์๋ฃ๊ตฌ์กฐ] #7_3 ํธ๋ฆฌ
** ํธ๋ฆฌ ๋ ธ๋ ์ญ์ 3๊ฐ์ง ๊ฒฝ์ฐ์ ์๋ฅผ ๋๋ ์ ์๊ฐ 1) Leaf ๋ ธ๋ ์ญ์ ์ - ์ญ์ ํ ๋ ธ๋์ Parent ๋ ธ๋๊ฐ ์ญ์ ํ ๋ ธ๋๋ฅผ ๊ฐ๋ฆฌํค์ง ์๋๋ก ํ๋ค 2) Child ๋ ธ๋๊ฐ 1๊ฐ์ธ ๋ ธ๋ ์ญ์ ์ - ์ญ์ ํ ๋ ธ๋์ Parent ๋ ธ๋๊ฐ ์ญ์ ํ ๋ ธ๋์ Child ๋ ธ๋๋ฅผ ๊ฐ๋ฆฌํค๋๋ก ํ๋ค 3) Child ๋ ธ๋๊ฐ 2๊ฐ์ธ ๋ ธ๋ ์ญ์ ์ - ์ญ์ ํ ๋ ธ๋์ ์ค๋ฅธ์ชฝ ์์ ์ค, ๊ฐ์ฅ ์์ ๊ฐ์ ์ญ์ ํ ๋ ธ๋์ Parent ๋ ธ๋๊ฐ ๊ฐ๋ฆฌํค๋๋ก ํ๋ค. or - ์ญ์ ํ ๋ ธ๋์ ์ผ์ชฝ ์์ ์ค, ๊ฐ์ฅ ํฐ ๊ฐ์ ์ญ์ ํ ๋ ธ๋์ Parent ๋ ธ๋๊ฐ ๊ฐ๋ฆฌํค๋๋ก ํ๋ค. **ํ์ด์ฌ ๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ์ผ๋ก ํธ๋ฆฌ ๊ตฌํ ---> (์ฝ์ ), (ํ์), ์ญ์ class BinarySearchTree: def __init__(self, head): s..
2021.05.30 -
[์๋ฃ๊ตฌ์กฐ] #7_2 ํธ๋ฆฌ
** ํ์ด์ฌ ๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ์ผ๋ก ํธ๋ฆฌ ๊ตฌํ ---> ์ฝ์ , ํ์, (์ญ์ ) 1) ๋ ธ๋ ํด๋์ค ๊ตฌํ class Node: def __init__(self, value): self.value = value self.left = None self.right = None 2) ์ด์ง ํ์ ํธ๋ฆฌ ๊ตฌํ class BinarySearchTree: def __init__(self, head): self.head = head # ์ฝ์ def insert(self, value): self.current_node = self.head # ๋น๊ต๋์์ผ๋ก, ํค๋๋ถํฐ ์์ while True: if value value: self.current_node = self.current_node.left # ์ด๋ else: self.c..
2021.05.30 -
[์๋ฃ๊ตฌ์กฐ] #7_1 ํธ๋ฆฌ
ํธ๋ฆฌ ๊ตฌํ์ ๋ก์ง์ด ๋ง์ด ๋ค์ด๊ฐ์ ์๊ณ ๋ฆฌ์ฆ ๊ฐ์ ๋๋์ ์ค๋ค. ๊ตฌํํ๊ธฐ ๋ณต์กํ๊ธฐ ๋๋ฌธ์ ์๋ฃ๊ตฌ์กฐ ์ค์์ ๋ฉด์ ์์ ์์ฃผ ์ง๋ฌธ์ด ๋์ค๋ ํธ์ด๋ค. ** ํธ๋ฆฌ(Tree) ๊ตฌ์กฐ Node์ Branch๋ฅผ ์ด์ฉํด์, ์ฌ์ดํด์ ์ด๋ฃจ์ง ์๋๋ก ๊ตฌ์ฑํ ๋ฐ์ดํฐ ๊ตฌ์กฐ ์ค์ฌ์ฉ ์: ์ด์ง ํธ๋ฆฌ์ ํํ๋ก, ํ์(๊ฒ์) ์๊ณ ๋ฆฌ์ฆ ๊ตฌํ์ ์ํด ๋ง์ด ์ฌ์ฉ๋จ ** ์ฉ์ด ์ ๋ฆฌ Node: ํธ๋ฆฌ์์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ๊ธฐ๋ณธ ์์. (๋ฐ์ดํฐ + ์ฐ๊ฒฐ ๋ ธ๋์ Branch ์ ๋ณด) ๋ฃจํธ ๋ ธ๋: ํธ๋ฆฌ ๋งจ ์์ ์๋ ๋ ธ๋ ๋ ๋ฒจ: ์ด๋ค ๋ ธ๋๊ฐ ์์นํ ํธ๋ฆฌ์ ์ธต Parent Node: ์ด๋ค ๋ ธ๋์ ์์ ๋ ๋ฒจ์ ์๋ ๋ ธ๋ Child Node: ์ด๋ค ๋ ธ๋์ ํ์ ๋ ๋ฒจ์ ์๋ ๋ ธ๋ Leaf Node: Child ๋ ธ๋๋ฅผ ๊ฐ์ง์ง ์๋ ๋ ธ๋ Sibling (Brothe..
2021.05.30