나의 풀이
- 배포 완료된 경우, pop(0)를 실행해야 하기 때문에 stack 대신 queue를 활용했다.
- 돌아보면 배포 가능한 프로그램을 굳이 담아둘 필요가 없었다.
from collections import deque
def solution(progresses, speeds):
# 배포 / 개발 속도
progresses = deque(progresses)
speeds = deque(speeds)
answer = []
deploy_list = []
while progresses:
# 하루 작업 진행
for i in range(len(progresses)):
progresses[i] += speeds[i]
# 배포 가능
if progresses[0] >= 100 and progresses[i] >= 100:
deploy_list.append(i)
# 배포 프로그램 선정
if deploy_list:
now = 0
cnt = 1
# 차례대로 배포 : 이전 idx와 1 차이
for j in deploy_list[1:]:
if j - now == 1:
now = j
cnt += 1
continue
else:
break
# 배포 가능 개수
answer.append(cnt)
# 배포 후 제거
for _ in range(cnt):
progresses.popleft()
speeds.popleft()
# 초기화
deploy_list = []
return answer
다른 사람 풀이
- 배포 가능조건이 만족되면 바로 제거하는 방식으로 해결했다.
#deque을 사용한 버전입니다.
def solution(progresses, speeds):
ProgressesQue = deque(progresses)
SpeedsQue = deque(speeds)
count = 0
answer = []
while ProgressesQue:
if ProgressesQue[0] + SpeedsQue[0] >= 100:
ProgressesQue.popleft()
SpeedsQue.popleft()
count += 1
else:
if count:
answer.append(count)
count = 0
for i in range(len(ProgressesQue)):
ProgressesQue[i] += SpeedsQue[i]
answer.append(count)
return answer