오류에 대한 지적이나 질문, 토의 환영합니다. 자유롭게 댓글 남겨주세요!.!
size()
: 현재 스택에 들어 있는 데이터 원소 개수를 반환합니다.isEmpty()
: 현재 스택이 비어 있는지를 판단합니다.True
를 비어있지 않으면 False
를 반환합니다.push(x)
: 스택에 데이터 x
를 추가합니다.pop()
: 스택의 맨 위의 데이터 원소를 제거하며, 반환합니다.peek()
: 스택의 맨위의 데이터 원소를 반환합니다.class ArrayStack:
def __init__(self):
self.data = []
def size(self):
return len(self.data)
def isEmpty(self):
return self.size() == 0
def push(self, item):
self.data.append(item)
def pop(self):
return self.data.pop()
def peek(self):
return self.data[-1]
from doublylinkedlist import Node
from doublylinkedlist import DoublyLinkedList
class LinkedListStack:
def __init__(self):
self.data = DoublyLinkedList()
def size(self):
return self.data.getLength()
def isEmpty(self):
return self.size() == 0
def push(self, item):
node = Node(item)
self.data.insertAt(self.size() + 1, node)
def pop(self):
return self.data.popAt(self.size())
def peek(self):
return self.data.getAt(self.size()).data
올바른 수식들
잘못된 수식들
push
pop
한 값이 쌍을 이루는 여는 괄호일 때: Passdef solution(expr):
match = {
')': '(',
'}': '{',
']': '['
}
S = ArrayStack()
for c in expr:
if c in '({[':
S.push(c)
elif c in match:
if S.isEmpty()
return False
else:
t = S.pop()
if t != match[c]:
return False
return S.isEmpty()
중위 표기 | 후위 표기 |
---|---|
push()
push()
push()
pop()
(괄호는 버림)pop()
하고 출력push()
def solution(S):
opStack = ArrayStack()
answer = ''
for c in S:
# operand
if 'A' <= c and c <= 'Z':
answer += c
# operator
else:
# empty
if opStack.isEmpty():
opStack.push(c)
# not empty
else:
# open braket
if c == '(':
opStack.push(c)
# closed bracket
elif c == ')':
while opStack.peek() != '(':
answer += opStack.pop()
opStack.pop()
# other operators
else:
# high or same priotity of stack.peek
while not opStack.isEmpty() and prec[c] <= prec[opStack.peek()]:
answer += opStack.pop()
# low priotity of stack.peek
opStack.push(c)
while not opStack.isEmpty():
answer += opStack.pop()
return answer
def postfixEval(tokenList):
st = ArrayStack()
for token in tokenList:
if type(token) is int:
st.push(token)
else:
tmp2 = st.pop()
tmp1 = st.pop()
if token == '+':
st.push(tmp1+tmp2)
elif token == '-':
st.push(tmp1-tmp2)
elif token == '*':
st.push(tmp1*tmp2)
else:
st.push(tmp1//tmp2)
return st.pop()
이 글은 프로그래머스 스쿨 인공지능 데브코스 과정에서 공부한 내용을 바탕으로 정리한 글입니다.