문제
- 각 배포마다 몇 개의 기능이 배포되는지 리턴하기
- 각 기능의 개발속도는 모두 다르며 진도가 100% 일 때, 서비스에 반영된다.
- 뒤에 있는 기능은 앞에 있는 기능이 먼저 배포되어야 배포될 수 있다.
- 배포는 하루에 한 번 가능하다.
- 1 <= 기능 개수 <= 100
풀이
- 시간복잡도 : 기능 개수가 100개이므로 대부분의 알고리즘이 가능할 것
- 개발이 끝나는 날짜를 계산해두고, 한 번 배포할 때 몇 개의 기능이 배포될 수 있는지 카운트 한다.
- 개발 끝나는 날 계산에서 - 부호를 붙인 이유는 올림 계산을 해야되므로
- 예를 들어 30%이고 하루에 30%씩 완성될 때는 2일이 아닌 3일차에 배포 가능함
- 이전 배포일보다 더 오랜 시간이 걸리는 경우 새롭게 배포되어야 한다.
def solution(progresses, speeds):
time = [-(-(100-p)//s) for p, s in zip(progresses,speeds)]
answer = [1, ] # 정답 배열
prev = time[0] # 이전 배포일
for i in range(1, len(time)):
if time[i] <= prev : # 이전 배포일보다 개발 날짜가 빠르면
answer[-1] += 1 # 함께 배포
else: # 아니면, 새로운 날에 배포
answer.append(1)
prev = max(prev, time[i])
return answer
References