# 오큰수 = Ai보다 오른쪽에 있으면서 Ai보다 큰 수 중에서 가장 왼쪽에 있는 수 구하기
# 스택 문제는 대부분 이런 형태의 코드인듯?
stack.append(0)
for i in range(1, n): # 역순 아님
while stack and A[stack[-1]] < A[i]:
answer[stack.pop()] = A[i]
stack.append(i) # 인덱스 저장
중위표기식 -> 후위표기식
st = input()
answer = []
stack = []
prior = {'*': 3, '/': 3, '+': 2, '-': 2, '(': 1}
for i in range(len(st)):
if st[i].isdigit():
answer.append(st[i])
elif st[i] == '(':
stack.append(st[i])
elif st[i] == ')':
while stack[-1] != '(':
answer.append(stack.pop())
stack.pop() # '('가 나타나면 pop
else:
while stack and prior[st[i]] <= prior[stack[-1]]:
answer.append(stack.pop())
stack.append(st[i])
while stack:
answer.append(stack.pop())
계산 방법
from collections import deque
dq = deque()
dq.index(i) # 덱에서도 인덱스 함수 사용 가능!
https://school.programmers.co.kr/learn/courses/30/lessons/42583
# 이런 식으로 스택 사용할 수도 있음
stack = [0] * bridge_length
total -= stack.pop(0)
stack.append(truck_weights[idx])
https://school.programmers.co.kr/learn/courses/30/lessons/42584
초 단위로 기록된 주식 가격이 담긴 배열 prices가 주어질 때, 가격이 떨어지지 않은 기간은 몇 초인지 리턴하기
[1, 2, 3, 2, 3] -> [4, 3, 1, 1, 0]
def solution(prices):
n = len(prices)
answer = [i for i in range(n-1, -1, -1)]
# 주식 가격이 떨어질 경우 찾기
stack = []
for i in range(n):
while stack and prices[stack[-1]] > prices[i]:
j = stack.pop()
answer[j] = i - j
stack.append(i) # 인덱스를 스택에 넣어줌
return answer
https://school.programmers.co.kr/learn/courses/30/lessons/67257
연산자의 우선순위를 재정의(+ > - > * ) 해서 만들 수 있는 가장 큰 수 구하기
# 계산하기
# exp = deque(['100', '-', '200', '*', '300', '-', '500', '+', '20'])
for p in prior:
stack = []
while len(exp) != 0:
op = exp.popleft()
if op == p:
result = str(eval(stack.pop() + op + exp.popleft()))
stack.append(result)
else:
stack.append(op)
exp = deque(stack)
https://www.acmicpc.net/problem/10799
나는 닫는 괄호가 나왔을 때! 나눠지는 막대기의 수를 세어주려고 했지만,
레이저가 나왔을 때 스택에 있는 괄호의 수를 세어주면 되는 문제였음..