[알고리즘] 기능개발

sith-call.dev·2023년 6월 5일
0

알고리즘

목록 보기
18/47

문제

문제 링크

코드

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 등의 순서가 문제에서 나왔을 때 이를 활용해야 한다.
중복 제거와 이 문제의 공통점은 모두 스택을 사용한다는 것이다.
그리고 스택을 활용하면서 중요했던 문제의 특징은 아래와 같다.

  1. LIFO 순서로 데이터가 처리되어야 한다.
  2. Stack의 Top 데이터를 처리하는 조건이 있다.

어떠면 Top 데이터에 어떤 조건이 걸린 경우에 스택을 써야 하는 것은 아닌지, LIFO 순서로 데이터를 처리해야 하는건 아닌지 역으로 생각해볼 수 있다.

profile
lim (time → ∞) Life(time) = LOVE

0개의 댓글

관련 채용 정보