์ค๋ ๋ฐฐ์ธ ๊ฒ โ๏ธ
# ํ๋์ ๋ฐ๋ณต๋ฌธ๊ณผ ๋ฆฌ์คํธ(์๋ฃ๊ตฌ์กฐ)์ ์ธ๋ฑ์ค, ์กฐ๊ฑด๋ฌธ์ ํ์ฉํ์ฌ ํน์ ๊ฐ์ ์ฐพ์ ๋๊น์ง ๋ฐ๋ณต
def linear_search(arr, target):
for idx in range(len(arr)):
if arr[idx] == target
return idx
# ์ ์ฒด ๋ฐฐ์ด์ ๋ค ๋์๋ค
return -1
def counter(num):
# ๋ฉ์ถ๋ ์กฐ๊ฑด
if num == 1:
return 1
# 1์ด ๋ ๋๊น์ง ํ๋์ฉ ๋ํด์ฃผ๊ธฐ
# num ๋ถํฐ 1๊น์ง ํ๋ฒ์ฉ ๋์ฌ ์ ์๋๋ก ๊ฑฐ๊พธ๋ก ๋๋ฆฌ๊ธฐ
else:
return num + counter(num-1)
return 1
)return gcd(x, x%y)
์๋ฃ ๊ตฌ์กฐ์ ์ค์ ๊ฐ๋
# ๊ธฐ๋ณธ ์ฝ๋
# ์ด์งํธ๋ฆฌ ๋
ธ๋ ์์ฑ
class BinaryTreeNode:
def __init__(self, value):
self.left = None #์ผ์ชฝ ์๋ธ ๋
ธ๋
self.value = value #ํด๋น ๋
ธ๋ ๊ฐ
self.right = None #์ค๋ฅธ์ชฝ ์๋ธ ๋
ธ๋
๋ชจ๋ ๋ฆฌํ ๋
ธ๋๋ค์ด ๋์ผํ ๋ ๋ฒจ์ ๊ฐ๊ณ ์๋ ๊ฒฝ์ฐ (0,1,2,3)
์์ ๊ฒฝ์ฐ์ฒ๋ผ 3๋ ๋ฒจ์์ ์๋ธ ๋
ธ๋ ๋ช๊ฐ๊ฐ ๋น ์ก๋ค
์ด์งํธ๋ฆฌ์ค ๋ง์ด ์ฐ์ด๋ ํธ๋ฆฌ..
์ด์ง๊ฒ์ํธ๋ฆฌ
์ผ์ชฝ ์๋ธ๋ ธ๋์ ๊ฐ (left child) < ๋ฃจํธ(๋ถ๋ชจ)๋ ธ๋์ ๊ฐ(root) < ์ค๋ฅธ์ชฝ ์๋ธ ๋ ธ๋์ ๊ฐ(right child)
์ค๋ณต๊ฐ์ ๊ฐ๊ณ ์๋ ๋ ธ๋๊ฐ ์์ด์ผ ํ๋ค
์ผ์ชฝ ์๋ธํธ๋ฆฌ ๋ ธ๋๋ค์ ๊ฐ์ ๋ฃจํธ ๊ฐ๋ณด๋ค ์์์ผ ํจ
์ค๋ฅธ์ชฝ ์๋ธํธ๋ฆฌ ๋ ธ๋๋ค์ ๊ฐ์ ๋ฃจํธ ๊ฐ๋ณด๋ค ์ปค์ผ ํจ
๊ฒ์ ๋ฐฉ๋ฒ
4๋ฅผ ๊ฒ์ํ ๋ 6๋ณด๋ค ์์ผ๋ฏ๋ก ์ผ์ชฝ ๋ถํฐ ๊ฒ์
4๊ฐ 2๋ณด๋ค ํฌ๋ฏ๋ก ์ค๋ฅธ์ชฝ ๊ฒ์
4๊ฐ 5๋ณด๋ค ์์ผ๋ฏ๋ก ์ผ์ชฝ ๊ฒ์
4 ๊ฒ์ ์ฑ๊ณต
๊ฒ์ ์คํจ์ ๊ฒฝ์ฐ, 8์ด 6๋ณด๋ค ํฌ๋ฏ๋ก ์ค๋ฅธ์ชฝ ๊ฒ์
8์ด 7๋ณด๋ค ํฌ๋ฏ๋ก ์ค๋ฅธ์ชฝ ๊ฒ์ -> ๋
ธ๋ ์์ -> ๊ฒ์ ์คํจ
class node:
def __init__(self, value):
self.value = value
self.left = None
self.right = None
# ์ด์ง ๊ฒ์ ํธ๋ฆฌ
class binary_search_tree:
def __init__(self, head):
self.head = head # root node
def insert_node(self, value):
self.base_node = self.head # ํค๋๋ฅผ root node๋ก ์ค์
while True:
if value < self.base_node.value: # root ๊ฐ์ด ์ฝ์
ํ ๋
ธ๋์ ๊ฐ๋ณด๋ค ํฌ๋ฉด
if self.base_node.left == None : # ๊ทธ๋ฆฌ๊ณ ์ผ์ชฝ ๋
ธ๋๊ฐ ๋น์ด์์ผ๋ฉด
self.base_node.left = node(value) # ํด๋น ๊ฐ์ ๊ฐ๊ณ ์๋ ๋
ธ๋ ์์ฑ
break # ๊ทธ๋ฆฌ๊ณ while๋ฌธ ๋๋ด๊ธฐ (์ฝ์
ํ์ผ๋๊น)
else: # ๊ทผ๋ฐ ์ ๋น์ด์์ผ๋ฉด
self.base_node = self.base_node.left # ๋ฃจํธ๋ฅผ ๊ทธ ์ ๋น์ด์๋ ์ผ์ชฝ ๋
ธ๋๋ก ๋ด๋ ค๊ฐ๊ธฐ
#๊ทธ๋ฆฌ๊ณ while True์ด๋ฏ๋ก break ๋ ๋๊น์ง ๋ฐ๋ณต
else: # root ๊ฐ์ด ์ฝ์
ํ ๋
ธ๋์ ๊ฐ๋ณด๋ค ์์ผ๋ฉด
if self.base_node.right == None:
self.base_node.right = node(value)
break
else:
self.base_node = self.base_node.right
def search_node(self, value):
self.base_node = self.head
while self.base_node: # root ๋
ธ๋ ๊ฐ์ด ์์๋๊น์ง
if self.base_node.value == value:
return True
else:
if self.base_node.value > value :
self.base_node = self.base_node.left
else:
self.base_node = self.base_node.right
return False