728x90
반응형
스택은 LIFO구조로 가장 나중에 집어넣은 데이터를 가장 먼저 뺄 수 있는 데이터 구조이다.
먼저 집어 넣은 데이터가 먼저 나오는 큐(Queue)와는 반대되는 개념이다.
아래 코드들은 스택을 활용하여 만들어 본 계산기이다.
1. infix 수식 -> postfix 수식 코드
tokens = input().split()
stack, output = [], []
op = {')': 3, '*': 2, '/': 2, '+': 1, '-': 1, '(': 0}
for t in tokens:
if t not in op:
output.append(int(t))
elif t == '(':
stack.append(t)
elif t == ')':
while stack != [] and stack[-1] != '(':
output.append(stack.pop())
stack.pop()
else:
while stack != [] and op[stack[-1]] >= op[t] :
output.append(stack.pop())
stack.append(t)
while stack:
output.append(stack.pop())
print(output)
예를 들어 입력이 "( 1 + 3 ) * 2 * 4 - 1"이라면 결과는 [1, 3, '+', 2, '*', 4, '*', 1, '-']이 된다.
2. 계산 코드
nums = []
for t in output:
if t not in op:
nums.append(t)
else:
a, b = nums.pop(), nums.pop()
if t == '+':
nums.append(b+a)
elif t == '-':
nums.append(b-a)
elif t == '*':
nums.append(b*a)
elif t == '/':
nums.append(b/a)
print(nums)
( 1 + 3 ) * 2 * 4 - 1 = 31
백준 알고리즘 문제 풀이)
728x90
반응형
'Agorithm > 자료구조, 알고리즘 정리' 카테고리의 다른 글
너비 우선 탐색(breadth-first search, BFS) (백준 문제 포함) (0) | 2021.03.10 |
---|---|
깊이 우선 탐색(depth-first search, DFS) (백준 문제 포함) (0) | 2021.03.10 |
큐(Queue), 덱(Deque) (백준 문제 포함) (0) | 2021.03.05 |
그리디(greedy) 알고리즘 (백준 문제 포함) (0) | 2021.01.29 |
이분 탐색(Binary Search) 백준 문제 포함 (0) | 2021.01.28 |