여러 기능의 개발 진도와 속도가 주어졌을 때, 각 배포마다 몇 개의 기능이 배포되는지 계산하는 문제
input, output 확인
input
output
제약조건 확인
뒤에 있는 기능이 먼저 개발되더라도 앞 기능이 개발완료될때까지 기다렸다가 같이 배포해야함
작업들을 배열 순서대로 처리해야 함
자료구조와 알고리즘 활용
from collections import deque
def solution(progresses, speeds):
answer = []
q=deque(tuple(zip(progresses,speeds)))
while q:
#배포 초기화
deploy=0
#첫번째 작업이 완료되었다면 배포기능 갯수 증가 및 큐에서 제거
while q and q[0][0]>=100:
q.popleft()
deploy+=1
# 각 작업의 진도 증가
q =deque([(p+s, s) for p, s in q])
if deploy:
answer.append(deploy)
return answer
progresses=[93, 30, 55]
speeds=[1, 30, 5]
solution(progresses,speeds)
남은 작업시간과 작업속도의 차이를 통해 남은 수행시간을 구한 다음에 일괄적으로 계산하는 방법으로 구현
from collections import deque
import math
def solution(progresses, speeds):
answer = []
q=deque(tuple(zip(progresses,speeds)))
while q:
#배포 초기화
deploy=0
#첫번째 작업의 남은 작업진도 계산 ->정수로 올림처리(작업진도는 정수단위이므로)
days_needed=math.ceil((100-q[0][0])/q[0][1])
# 각 작업의 진도 업데이트 (단 100 초과하지 않도록)
q =deque([(min(p+days_needed*s,100), s) for p, s in q])
#첫번째 작업이 완료되었다면 배포한 기능갯수만큼 증가 및 큐에서 제거
while q and q[0][0]>=100:
q.popleft()
deploy+=1
if deploy:
answer.append(deploy)
return answer
progresses=[93, 30, 55]
speeds= [1, 30, 5]
print(solution(progresses,speeds))