https://s3-us-west-2.amazonaws.com/secure.notion-static.com/aad059bc-f1ff-43b8-abcc-37f4226aed5d/Untitled.png

# 위의 그래프를 예시로 삼아서 인접 리스트 방식으로 표현했습니다!
graph = {
    1: [2, 5, 9],
    2: [1, 3],
    3: [2, 4],
    4: [3],
    5: [1, 6, 8],
    6: [5, 7],
    7: [6],
    8: [5],
    9: [1, 10],
    10: [9]
}

def dfs_stack(adjacent_graph, start_node):
    visited = []
    stack = []

    stack.append(start_node)
    while len(stack) > 0:
        print(stack, visited)
        current_node = stack.pop()

        visited.append(current_node)

        for adjacent_node in adjacent_graph[current_node]:
            if adjacent_node not in visited:
                stack.append(adjacent_node)
    
    return visited 

print(dfs_stack(graph, 1))  # 1 이 시작노드입니다!
# [1, 9, 10, 5, 8, 6, 7, 2, 3, 4] 이 출력되어야 합니다!

https://s3-us-west-2.amazonaws.com/secure.notion-static.com/6ba4097b-fa4b-45b3-b57e-d57853fa4c0f/Untitled.png

class MaxHeap:
    def __init__(self):
        self.items = [None]
  # None이 무조건 맨 앞에 들어가 있어야 함

    def insert(self, value):
        self.items.append(value)

        if len(self.items) == 2:
            return

        cur_i = len(self.items) - 1
        while cur_i > 1:
            par_i = cur_i // 2
            
            if self.items[cur_i] > self.items[par_i]:
                self.items[cur_i], self.items[par_i] = self.items[par_i], self.items[cur_i]

                cur_i = par_i
            else:
                return

    def delete(self):
        biggest = self.items[1]

        self.items[1], self.items[-1] = self.items[-1], self.items[1]
        cur_i = 1
        
        while cur_i <= len(self.items) - 1:
            left_i = cur_i * 2
            right_i = cur_i * 2 + 1

            bigger_i = self.items.index(max(self.items[right_i], self.items[left_i]))

            if self.items[bigger_i] > self.items[cur_i]:
                self.items[bigger_i], self.items[cur_i] = self.items[cur_i], self.items[bigger_i]
            else:
                return biggest
            
        return biggest

max_heap = MaxHeap()
max_heap.insert(8)
max_heap.insert(6)
max_heap.insert(7)
max_heap.insert(2)
max_heap.insert(5)
max_heap.insert(4)
print(max_heap.items)  # [None, 8, 6, 7, 2, 5, 4]
print(max_heap.delete())  # 8 을 반환해야 합니다!
print(max_heap.items)  # [None, 7, 6, 4, 2, 5]

https://s3-us-west-2.amazonaws.com/secure.notion-static.com/acd884ce-d902-455d-a14a-fb86c6a7be34/Untitled.png