from collections import deque
def processing(stack):
if stack:
for i in range(len(stack)):
process, speed = stack[i]
process += speed
stack[i] = (process, speed)
else:
return []
def solution(progresses, speeds):
answer = []
stack = list(zip(progresses, speeds))
stack.reverse()
while stack:
today = 0
while stack and stack[-1][0] >= 100:
today += 1
stack.pop()
if today > 0:
answer.append(today)
if stack:
processing(stack)
return answer
스택을 이용해서, 만약에 스택의 탑에 있는 원소가 100을 넘으면 완료가 된 것이므로 팝시킨다. 이때, 스택을 사용한 이유는 앞에 일을 끝마쳐야만 다음 기능을 배포할 수 있다는 순서가 있기 때문이었다. 즉, LIFO 순서로 자료가 처리되어야 했기 때문이다.
FIFO, LIFO 등의 순서가 문제에서 나왔을 때 이를 활용해야 한다.
중복 제거와 이 문제의 공통점은 모두 스택을 사용한다는 것이다.
그리고 스택을 활용하면서 중요했던 문제의 특징은 아래와 같다.
어떠면 Top 데이터에 어떤 조건이 걸린 경우에 스택을 써야 하는 것은 아닌지, LIFO 순서로 데이터를 처리해야 하는건 아닌지 역으로 생각해볼 수 있다.