프로그래머스 팀에서는 기능 개선 작업을 수행 중입니다. 각 기능은 진도가 100%일 때 서비스에 반영할 수 있습니다.
또, 각 기능의 개발속도는 모두 다르기 때문에 뒤에 있는 기능이 앞에 있는 기능보다 먼저 개발될 수 있고, 이때 뒤에 있는 기능은 앞에 있는 기능이 배포될 때 함께 배포됩니다.
먼저 배포되어야 하는 순서대로 작업의 진도가 적힌 정수 배열 progresses와 각 작업의 개발 속도가 적힌 정수 배열 speeds가 주어질 때 각 배포마다 몇 개의 기능이 배포되는지를 return 하도록 solution 함수를 완성하세요.
progresses
[93, 30, 55]
[95, 90, 99, 99, 80, 99]
speeds
[1, 30, 5]
[1, 1, 1, 1, 1, 1]
return
[2, 1]
[1, 3, 2]
import math
def solution(progresses, speeds):
answer = []
n = len(progresses)
days = []
for i in range(n):
pLeft = 100 - progresses[i]
daysLeft = math.ceil(pLeft / speeds[i])
days.append(daysLeft)
while days:
count = 1
d = days.pop(0)
while len(days) != 0 and d >= days[0]:
count += 1
days.pop(0)
answer.append(count)
return answer
step 1
answer = []
n = len(progresses)
days = []
answer =[]
◾ return value를 모을 answer list 생성
n = len(progresses)
◾ len(parameter) 을 알고리즘 풀이를 할 떄 자주 사용하는것 같아 변수화 시킴
days = []
◾ 각 기능의 남은 일정을 담는 리스트
◾ queue 로 사용될 리스트
step 2
for i in range(n):
pLeft = 100 - progresses[i]
daysLeft = math.ceil(pLeft / speeds[i])
days.append(daysLeft)
pLeft
◾ 각 기능 남은 진도
daysLeft
◾ 각 기능의 남은 진도를 완료하기 위해 필요한 일수
◾ math.ceil()을 통해 정수처리한다
days.append(daysLeft)
◾ 남은 일수 리스트화
◾ 입출력 예 1 = [ 7, 3, 9 ]
step 3
while days:
count = 1
d = days.pop(0)
while len(days) != 0 and d >= days[0]:
count += 1
days.pop(0)
answer.append(count)
count = 1
◾ answer[] 의 리턴할 값은 최소 1이다
◾ days[]에서 첫번 쨰 일수를 다음 일수와 비교한다
◾ 앞 순서 프로젝트가 다음 프로젝트보다 오래 걸린다면 count 수 추가
◾ 비교연산이 끝날 떄마다 다음 일수와 비교를 위해 days.pop(0)
입출력 예 1
◾ 첫 기능 은 7일 이 필요하고 3일이 필요한 다음 기능보다 많기 때문에 count += 1
◾ answer.append(count) - 반복문이 끝날 때 마다 리턴할 정답 리스트에 추가