일단 스택 하나 사용하는데, 작업이 완료된 인덱스를 넣는 스택 (if prog[i] >= 100)
-> 이때, 스택에는 완료된 것 먼저 "스택"에 넣어야 꺼낼 때 같이 꺼내짐
출력 : 각 배포마다 몇 개의 기능이 배포되는지를 return
i = -1
while 1:
i += 1
prog[i] += speeds[i]
for j in range(len(prog)):
if prog[j] >= 100:
if j == 0: # 순차적으로 진행하니까, 맨 앞에 값이 100을 넘었다면
prog.pop(j)
ans += 1
if stack:
ans += len(stack)
stack = []
else: # 맨 앞에값이 100에 도달한게 아니라면
stack.append(prog.pop(j))
answer.append(ans)
ans = 0
예를들면,
나는 i++하면서 순서대로 5,4,1을 제거하고 싶어. 그래서 결과를 [3,2]만 냄기고싶어
[3,5,4,1,2] 에서 pop(1)을 했음
[3,4,1,2]가 되는데 이때, for문이나 while문할 때 i++하잖아
[3,4,1,2]에서 pop(1+1=2)을 했음
[3,4,2] 가 되어버림 ~> 내가 원했던 4가 pop되지 않고 퐁당퐁당 1이 pop되어버림!!!
그리고 이렇게 가면 out of range에러가 또 뜨겠지..!
즉! 이래서 퐁당퐁당 pop()이 됐던거임! 내가 이것을 간과했다...!
=>그래서 매번 for문이랑 pop쓸 때 주의해줘야하고,
for문이랑 쓸라면 pop한 후에 break하고 밖에서 다시 range(length) 갱신해줘야함!
def solution(progresses, speeds):
answer = []
stack = []
i = -1
while progresses:
ans = 0
leng = len(progresses)
for j in range(0, leng):
progresses[j] += speeds[j]
if progresses[j] >= 100:
if j == 0: # 순차적으로 진행하니까, 맨 앞에 값이 100을 넘었다면
progresses.pop(j)
speeds.pop(j)
ans += 1
if stack:
ans += len(stack)
stack = []
answer.append(ans)
break
else: # 맨 앞에값이 100에 도달한게 아니라면
stack.append(progresses.pop(j))
speeds.pop(j)
break
if not progresses:
break
return answer
def solution(progresses, speeds):
answer = []
day = 0 # 작업 일수 (배포 날짜)
count = 0 # 배포된 작업 개수
# 100 % 인지 확인하는 식 : progresses(현재 작업진도) + day(걸린 일수) * speeds(작업 속도)
while len(progresses) > 0 :
if ( progresses[0] + day * speeds[0] ) >= 100 : # 작업진도가 100% 이상이면
progresses.pop(0) # 작업진도 리스트와
speeds.pop(0) # 작업속도 리스트에서 삭제한 후
count += 1 # 배포 개수 1 증가
else :
if count > 0 : # 현재는 작업진도가 100% 이상이 아닌데, 앞에서 배포할 작업이 있었다면
answer.append(count) # 배포개수를 answer 리스트에 담아준 후
count = 0 # 초기화
day += 1 # 다음 날짜 작업을 확인하기 위해 작업 일수에 하루를 더해줌
answer.append(count) # 마지막 배포된 작업들에 대해서 append 를 실행하지 않고 while문을 빠져나왔기 때문에 처리해줘야함
return answer