First in Last Out
Last In First Out
ctrl+z
기능입니다push()
pop()
class Node:
def __init__(self, val=0, next=None):
self.val = val
self.next = next
class Stack:
def __init__(self):
self.top = None
def push(self, value):
self.top = Node(value, self.top)
def pop(self):
if not self.top:
return None
node = self.top
self.top = node.next
return node.value
def is_empty(self):
return self.top is None
push
pop
is_empty
def test_problem_stack(s):
# 여는 괄호가 stack에 추가되고, 닫는 괄호가 나오면 stack에서 마지막 요소를 꺼내 비교합니다.
# stack이 비어 있으면, 현재 닫는 괄호에 맞는 여는 괄호가 없다는 의미이므로 False를 반환해야 합니다.
stack = []
pair = {
')': '(',
'}': '{',
']': '['
}
for char in s:
if char in '({[':
stack.append(char)
else:
if len(stack) == 0:
# 문자열이 ")"로 시작한다면, 스택에는 아무 것도 없지만 닫는 괄호가 나왔으므로, stack.pop()을 실행하면 에러가 발생
# 이를 방지하려면 스택이 비어 있는지 먼저 확인
return False
top = stack.pop()
if pair[char] != top:
return False
return len(stack) == 0
pair
딕셔너리입니다.
def test_stack():
stack = Stack()
stack.push(1)
stack.push(2)
stack.push(3)
stack.push(4)
stack.push(5)
assert stack.pop() == 5
assert stack.pop() == 4
assert stack.pop() == 3
assert stack.pop() == 2
assert stack.pop() == 1
assert stack.pop() is None
assert stack.is_empty()
assert test_problem_stack("()")
assert test_problem_stack("()[]{}")
assert test_problem_stack("({[][]})")
assert test_problem_stack("({[]})")
assert not test_problem_stack("(]")
assert not test_problem_stack("(()]")
assert not test_problem_stack("(((])")
assert not test_problem_stack("((())")