문제 보러 가기 👈 클릭!
progress_q = 완성되지 않은 기능(큐 자료구조)
speed_q = 완성되지 않은 기능의 속도(큐 자료구조)
기능이 모두 완성 될때까지 day를 1씩 늘려가며 맨 앞에 있는 기능이 완성됬는지 아닌지 확인한다.
기능이 완성됬을경우, 해당 기능과 속도를 큐에서 제거하고 개수를 count한다. 단 해당 경우에는 day를 1 증가시키지 않는다.
기능이 완성되지않은경우,이때까지 count한 개수가 0 이상이면 answer에 추가하고 0으로 다시 초기화 시킨다. count 개수와 상관없이 항상 day를 1 증가시킨다.
구현 코드👇
from collections import deque
def solution(progresses, speeds):
answer = []
day, cnt = 1, 0
progress_q, speed_q = deque(progresses), deque(speeds)
while progress_q:
if progress_q[0] + speed_q[0] * day >= 100:
progress_q.popleft()
speed_q.popleft()
cnt += 1
else:
if cnt:
answer.append(cnt)
cnt = 0
day += 1
answer.append(cnt)
return answer
Q = [[기능을 완성하는데 걸리는 일 수, 해당 일수에 완성하는 기능의 개수], ....] 로 정의한다.
zip함수를 사용하여 기능과 기능의 속도를 함께 차례대로 꺼낸다.
꺼낸 기능과 속도를 사용하여 해당 기능을 완성하는데까지 걸리는 일 수를 구한다.
해당 일 수가 앞의 기능을 완성하는데까지 걸리는 일 수 보다 클 경우, Q에 [걸리는 일 수, 1]을 추가한다.
작을 경우, 앞의 기능을 완성하는데까지 걸리는 일 수에 완성하는 기능의 개수를 1 증가 시킨다.
해당 일수에 완성하는 기능의 개수 부분만 return 한다.
구현 코드👇
def solution(progresses, speeds):
Q = []
for progress, speed in zip(progresses, speeds):
if not Q or Q[-1][0] < -((progress - 100) // speed):
Q.append([-((progress - 100) // speed), 1])
else:
Q[-1][1] += 1
return [q[1] for q in Q]