TIL - 0113

문인철 교수님의 ‘데이터 구조 및 분석: Linear Structure and Dynamic Programming’ 수업

Stack

  • 200113
  • Linked list 를 변형해서 만들 수 있는 구조
  • Linked list 와 다르게 리스트 중간에 값을 추가하는게 불가능함
  • LIFO: Last in First out

POP

  • stack 에 데이터를 넣는 것
  • linked list 에 가장 첫번째 인스턴스에 데이터 삽입

Push

  • stack 에 있는 가장 나중에 추가된 데이터를 빼내는 것
  • linked list 에 가장 첫번째 인스턴스 데이터 삭제

코드

class Stack:
    linked_list = SinglyLinkedList()
    
    def pop(self):
        print(self.linked_list.get(0).value)
        return self.linked_list.remove_node(0)
    
    def push(self, value):
        return self.linked_list.insert_node(value, 0)

stack = Stack()
stack.push('a')
stack.push('b')
stack.push('c')

stack.pop() # c
stack.pop() # b
stack.pop() # a

Balancing Symbols

  • 200113

코드

class Stack:
    linked_list = SinglyLinkedList()
    
    def pop(self):
        return self.linked_list.remove_node(0)
    
    def push(self, value):
        return self.linked_list.insert_node(value, 0)

class BalancingCheck:
    symbols_dict = {
        '{': '}',
        '[': ']',
        '(': ')'
    }
    stack = Stack()
    
    def check_balanced(self, equation):
        for i in equation:
            if i in self.symbols_dict.keys():
                self.stack.push(i)

            if i in self.symbols_dict.values():
                self.stack.pop()
        return self.stack.linked_list.size == 0


stack = BalancingCheck()
stack.check_balanced("7+{[2+(1+2)]*3}")
>> True

stack = BalancingCheck()
stack.check_balanced("[2+(1+2]-3")
>> False