나의 풀이는 stack의 기본?에 충실한 풀이라고 감히 '자평' 한다.
from collections import deque
def solution(progresses, speeds):
answer = []
progresses = deque(progresses)
speeds = deque(speeds)
while progresses:
cnt = 0
while progresses and progresses[0] >= 100:
progresses.popleft()
speeds.popleft()
cnt += 1
progresses = deque([progress+speed for progress,speed in zip(progresses,speeds)])
if cnt :
answer.append(cnt)
return answer
하지만 단점은 가장 빠른 풀이가 아니라는 점.
비효율적인 부분이 두 가지가 있다.
계속 각자의 진행도만큼 더해주다가, 맨 왼쪽 요소가 진행도 100이 되면, 안의 것들을 모조리 빼는 것으로 요약 할 수 있겠다.
아래 코드의 절차는 다음과 같다.
workday
에 저장.이 아래가 묘미다.
ex)
1) workday =[5,2,3,6,2,4]
에서,
2) 5보다 큰 6(index = 3)
이 존재하기 때문에
3) index를 answer에 append한 후,
4) 해당 index까지 workday = workday[3:]로 workday를 잘라준다.
5) 그러면 [6,2,4]가 나온다.
6) 이 경우에는 아래 코드에서decision
이 빈 배열로 나오기 때문에, 이때는 남은 workday의 len을 append 해주면 된다.
def solution(progresses, speeds):
workday = [(100-progress)//speed+1 if (100-progress)%speed != 0 else (100-progress)//speed
for progress, speed in zip(progresses,speeds)]
answer = []
while workday:
decision = [i for i in workday if i>workday[0]]
if decision:
index = workday.index(decision[0])
answer.append(index)
workday = workday[index:]
else :
answer.append(len(workday))
break
return answer