스택 (Stacks)
한 쪽 끝에서 데이터를 push 하거나 pop해야한다.
즉, 후입선출 (LIFO : Last In First Out) 특징을 가지는 선형 자료구조
스택에서 발생하는 오류
- 비어있는 스택에서 데이터 원소를 꺼내려 할 때 : Stack underflow
- 꽉 찬 스택에 데이터 원소를 넣으려 할 때 : Stack overflow라고 부름
스택의 추상적 자료구조 구현
- 배열
- Python 리스트와 메서드를 이용해 구현
- 연결리스트
- 양방향 연결리스트를 이용해 구현
연산의 정의
- size() : 현재 스택에 들어있는 데이터 원소의 수를 구함
- isEmpty() : 현재 스택이 비어 있는지를 판단
- push() : 데이터 원소 x를 스택에 추가
- pop() : 스택의 맨 위에 저장된 데이터 원소를 제거 및 반환
- peek() : 스택의 맨 위에 저장된 데이터 원소를 반환 (제거는 하지 않음)
11강 과제: 수식의 괄호 검사
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]
def 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()
'Algorithm' 카테고리의 다른 글
[프로그래머스 알고리즘]14강: 큐(Queue) (0) | 2021.07.17 |
---|---|
[프로그래머스 알고리즘] 12강, 13강: 수식의 후위 표기법 및 수식 계산(Postfix Notation) (0) | 2021.07.16 |
[프로그래머스 알고리즘] 10강: 양방향 연결 리스트 (Doubly Linked Lists) (0) | 2021.07.15 |
[프로그래머스 알고리즘] 7강, 8강, 9강: 연결 리스트 (Linked Lists) (0) | 2021.07.14 |
[프로그래머스 알고리즘] 6강: 알고리즘 복잡도 (Complexity of Algorithm) (0) | 2021.07.13 |