1) 추가될 위치 접근: index-1번째 노드에 접근하기
2) 새로운 노드 할당: new_node 변수에 할당하기
3) 기존 노드 임시 변수 할당: next_node 변수에 할당하기
4) index-1번째 노드와 새로운 노드 연결하기
5) 새로운 노드와 기존 노드 연결하기
def add_node(self, index, value): # 전략: index-1번째와 index번째 node를 분리하고, 그 사이에 새로운 node를 입력한다.
new_node = Node(value) # 2) 새로운 노드 할당하기
if index == 0: # 0번째 추가 시
new_node.next = self.head # head를 새로운 노드 다음에 연결한다.
self.head = new_node # 새로 추가된 노드를 head로 설정한다.
return
node = self.get_node(index - 1) # 1) index-1번째 index에 접근한다.
next_node = node.next # 3) index번째 이후 node(줄줄이 사탕)를 next_node 변수에 저장한다.
node.next = new_node # 4) index -1 번째 노드와 새로운 index를 연결한다.
new_node.next = next_node # 5) 새로운 노드와 index번째 이후 node를 모두 연결한다.
1) 삭제 노드 접근: index-1번째 노드에 접근하기
2) 기존 노드 임시 변수 할당: next_node 변수에 할당하기
3) index-1번째 노드와 기존 노드 연결하기
def delete_node(self, index): # 전략: index-1번
if index == 0: # 0번째 삭제 시
self.head = self.head.next # head 노드를 head 다음 노드로 설정하기
return
node = self.get_node(index-1) # 1) index-1 번째 노드에 접근하기
node.next = node.next.next # 2), 3) index-1의 다음다음(index+1)번째의 노드를 index-1+1번째 노드로 할당하기
2-1) 최댓값, 최솟값 할당하기
2-2) 예측값 할당하기
2-3) 최솟값이 최댓값보다 같거나 작을 때까지(while)
2-4) (while) 만약 예측값이 목표값과 같다면(if)
2-5) (while, if) True를 반환하라
2-6) (while) 만약 예측값이 목표값보다 작으면(elif)
2-7) (while, elif) 최솟값 = 예측값 + 1
2-8) (while) 만약 예측값이 목표값보다 크면(else)
2-9) (while, else) 최댓값 = 예측값 - 1
2-10) (while) 예측값을 다시 절반으로 나누기
find_target = 18
find_number = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20]
def is_existing_target_number_binary(target, array):
cur_min = 0 # 2-1) 최솟값 할당하기
cur_max = len(array) - 1 # 2-1) 최댓값 할당하기
cur_guess = (cur_min + cur_max) // 2 # 2-2) 예측값 할당하기
while cur_min <= cur_max: # 2-3) 최솟값이 최댓값보다 같거나 작을 때까지(while)
if array[cur_guess] == target: # 2-4) (while) 만약 예측값이 목표값과 같다면(if)
return True # 2-5) (while, if) True를 반환하라
elif array[cur_guess] < target: # 2-6) (while) 만약 예측값이 목표값보다 작으면(elif)
cur_min = cur_guess + 1 # 2-7) (while, elif) 최솟값 = 예측값 + 1
else: # 2-8) (while) 만약 예측값이 목표값보다 크면(else)
cur_max = cur_guess - 1 # 2-9) (while, else) 최댓값 = 예측값 - 1
cur_guess = (cur_min + cur_max) // 2 # 2-10) (while) 예측값을 다시 절반으로 나누기
return False
result = is_existing_target_number_binary(find_target, find_number)
print(result)