[프로그래머스] 기능개발
큐, 브루트 포스
이 문제는 현재 작업 진행률에 해당하는 progresses, 하루에 수행할 수 있는 작업 진행 속도 speeds가 주어진다.
개발은 동시에 이루어지나, 앞의 기능이 개발이 완료된다면 그날 완료되어있는 뒤의 연속되어있는 모든 기능들과 함께 배포가 된다.
예를 들면 [95 90 99 99 80 99], [1 1 1 1 1 1]
인 경우 [5 10 1 1 20 1]
일 후에 각 작업은 완료된다.
그렇다면 5일 후에 1번째 작업 배포, 10일후에 2, 3, 4번째 작업 배포, 20일 후에 5, 6번째 작업을 배포하여 [1, 3, 2]
를 결과로 도출해야 하는 문제이다.
문제에서 주어진 인풋은 100 100 밖에 안되므로 그냥 완전탐색을 해서 구현해도 된다.
또한 큐(or deque), 리스트를 사용하여 head값을 이용하여 head보다 남은 일수가 큰 작업이 오면 카운팅 해주는 방식으로 구현할 수 있다.
코드는 다음과 같다.
구현
import math
def solution(progresses, speeds):
answer = []
remaining_days = [0] * len(progresses)
remaining_days[0] = math.ceil((100 - progresses[0]) / speeds[0])
head = 0
cnt = 1
for i in range(1, len(progresses)):
remaining_days[i] = math.ceil((100 - progresses[i]) / speeds[i])
if remaining_days[head] >= remaining_days[i]:
cnt += 1
continue
answer.append(cnt)
head = i
cnt = 1
answer.append(cnt)
return answer
#print(solution([93, 30, 55], [1, 30, 5]))
#print(solution([95, 90, 99, 99, 80, 99], [1, 1, 1, 1, 1, 1]))
#print(solution([95], [1]))