gdh0730
2022.03.28
@gdh0730님이 새 포스트를 작성했습니다.
15일차 - 과제
from tkinter.tix import MAX MAX_QUEUE_SIZE = 50 class Queue:     def __init__(self):         self.arr = [None] * MAX_QUEUE_SIZE         self.head = 0         self.tail = 0     def is_empty(self):         if self.head == self.tail:             return True         return False     def is_full(self):         if (self.tail+1) % MAX_QUEUE_SIZE == self.head:             return True         return False     def enqueue(self, item):         if self.is_full():             print("큐가 가득 차서 더 이상 데이터를 넣을 수가 없습니다.")             return -1         self.tail = (self.tail+1) % MAX_QUEUE_SIZE         self.arr[self.tail] = item     def dequeue(self):         if self.is_empty():             print("큐가 텅텅 비어있어요")             return -1         self.head = (self.head+1) % MAX_QUEUE_SIZE         return self.arr[self.head] class Graph:     def __init__(self):         self.node_count = 7         self.graph = [             [1, 1, 0, 0, 0, 0, 0],             [0, 1, 1, 0, 1, 1, 1],             [0, 1, 1, 1, 1, 1, 1],             [0, 1, 0, 1, 0, 0, 1],             [0, 0, 0, 1, 0, 0, 1],             [1, 0, 0, 1, 1, 1, 1],             [1, 1, 1, 1, 0, 1, 0],         ] col = map(int(input())) row = map(int(input())) movey = [0, 0, -1, -1] movex = [-1, -1, 0, 0] def BFS(graph, x, y):     queue = Queue()     queue.enqueue((x, y))     while not queue.is_empty():         x, y = queue.dequeue()         for i in range(4):             nx = x + movex[i]             ny = y + movey[i]             if nx < 0 or nx >= col or ny < 0 or ny >= row:                 continue             if graph.graph[nx][ny] == 0:                 continue             if graph.graph[nx][ny] == 1:                 graph.graph[nx][ny] = graph.graph[x][y] + 1                 queue.enqueue((nx, ny))     return graph.graph[col-2][row-1] graph = Graph() print(BFS(graph, 0, 0))
gdh0730
2022.03.24
@gdh0730님이 새 포스트를 작성했습니다.
13일차 - 과제
MAX_HEAP_SIZE = 101 class Heap: def __init__(self): self.arr = [None] * MAX_HEAP_SIZE self.heap_count = 0 # 부모 노드와 우선 순위 비교 def compare_with_parent(self, index): if index <= 1: return False parent_index = index // 2 if self.arr[index][0] < self.arr[parent_index][0]: return True else: return False # 데이터 삽입 def insert(self, data): self.heap_count += 1 if self.heap_count == 1: self.arr[self.heap_count] = data return self.arr[self.heap_count] = data insert_index = self.heap_count # 삽입된 데이터가 부모 노드보다 작으면 스위칭 while self.compare_with_parent(insert_index): parent = insert_index // 2 self.arr[insert_index], self.arr[parent] = ( self.arr[parent], self.arr[insert_index], ) insert_index = parent # print(self.arr[1: self.heap_count + 1]) return True # 자식 노드와 우선 순위 비교 def compare_with_child(self, index): left = 2 * index right = 2 * index + 1 if self.arr[left] == None and self.arr[right] == None: return False if self.arr[right] == None: if self.arr[left][0] < self.arr[index][0]: return left else: return False if self.arr[left][0] < self.arr[right][0]: return left else: return right # 우선 순위가 가장 빠른 데이터 추출 def pop(self): index = 1 root = self.arr[1] terminal_data = self.arr[self.heap_count] self.arr[self.heap_count] = None self.arr[index] = terminal_data self.heap_count -= 1 # 말단 데이터를 최상위 노드로 이동 후 자식노드와 비교하며 스위칭 while True: child_index = self.compare_with_child(index) if not child_index: break self.arr[child_index], self.arr[index] = ( self.arr[index], self.arr[child_index], ) index = child_index return root[1] heap = Heap() heap.insert([9, "JAVA 익히기"]) heap.insert([6, "파이썬 프로젝트 시작하기"]) heap.insert([10, "파이썬 챗봇과정 학습"]) heap.insert([1, "코드메이트에 포스트 작성"]) heap.insert([5, "자료구조 학습"]) heap.insert([2, "모각코 출석"])
gdh0730
2022.03.21
@gdh0730님이 새 포스트를 작성했습니다.
10일차 - 과제
class Node:     def __init__(self,data):         self.data = data         self.next = None         self.prev = None     class doubly_linked_list:     def __init__(self):         self.head = None #Adding data elements     def push(self, NewVal):         NewNode = Node(NewVal)         NewNode.next = self.head         if self.head is not None:             self.head.prev = NewNode         self.head = NewNode #Define the method to insert the element     def insert(self, prev_node, NewVal):         if prev_node is None:             return         NewNode = Node(NewVal)         NewNode.next = prev_node.next         prev_node.next = NewNode         if NewNode.next is not None:             NewNode.next.prev = NewNode #Define the append the method to add elements at the end     def append(self, NewVal):         NewNode = Node(NewVal)         NewNode.next = None         if self.head is None:             NewNode.prev = None             self.head = NewNode             return         last = self.head         while( last.next is not None):             last = last.next         last.next = NewNode         NewNode.prev = last         return #Print the Doubly Linked list     def listprint(self, node):         while(node is not None):             print(node.data),             last = node             node = node.next dllist = doubly_linked_list() dllist.push(12) dllist.push(8) dllist.push(62) dllist.insert(dllist.head.next,13) dllist.append(45) dllist.listprint(dllist.head)
gdh0730
2022.03.17
@gdh0730님이 새 포스트를 작성했습니다.
8일차 - 과제
num = [] T_C = [] cf = [] ta = [] for i in range(10): N, C, T = map(int, input().split()) num.append(N) cf.append(C) ta.append(T) T_C.append(T-C) # (타우린-카페인) start = 0 partial_sum = 0 index = 0 while start <= 6: # T-C 배열의 마지막 index 값이 9이므로 start값은 최대 6까지 # 고정된 부분의 타우린, 카페인 합이 가장 작은 구간을 찾는다. if partial_sum < sum(T_C[start:start+3]): # (타우린-카페인) 배열의 고정된 크기의 부분 배열이 고정된 부분 배열보다 크다면, partial_sum = sum(T_C[start:start+3]) # partial_sum은 sum ... 이다 index = start start += 1 print("{0} {1} {2}의 타우린 합은 {3}, 카페인 합은 {4}로 가장 효과가 좋습니다.".format(index, index+1, index+2, sum(ta[start:start+3]), sum(cf[start:start+3])))
gdh0730
2022.03.11
@gdh0730님이 새 포스트를 작성했습니다.
4일차 - 과제
def binary_search(target, arr, start_index=0, end_index=None):     # end_index가 따로 주어지지 않은 경우에는 리스트의 마지막 인덱스     if end_index == None:         end_index = len(arr) - 1     # start_index가 end_index보다 크면 some_list안에 element는 없다     if start_index > end_index:         return None            # 범위의 중간 인덱스를 찾는다     mid = (start_index + end_index) // 2        # 이 인덱스의 값이 찾는 값인지 확인을 해준다     if arr[mid] == target:         return mid     # 찾는 항목이 중간 값보다 작으면 리스트 왼쪽을 탐색해준다     if target < arr[mid]:         return binary_search(target, arr, start_index, mid - 1)     # 찾는 항목이 중간 값보다 크면 리스트 오른쪽을 탐색해준다     else:         return binary_search(target, arr, mid + 1, end_index)
gdh0730
2022.03.09
@gdh0730님이 새 포스트를 작성했습니다.
3일차 - 과제
def binary_search(arr, length, target):     start = 0           # 탐색 배열의 시작     end = arr[-1]       # 탐색 배열의 끝     while (end - start >= 0):         mid = (start + end) // 2     # 중앙값 설정         sum = 0         for i in arr:             sum += i // mid       # 배열의 합을 중앙값으로 나눴을때         if (sum == target):       # sum이 target이면 그 중앙값 return             return mid         elif (sum > target):             start = mid + 1         else:             end = mid - 1     return 0 arr = [215, 513, 712, 803] length = 4 target = 10 result = binary_search(arr, length, target) print(result) #200