프로그래밍/Python
프로그래머스_기능개발
donie
2020. 10. 4. 14:54
1. 문제
2. 소스코드
import math def solution(progresses, speeds): answer = [] now = 0 next = 0 daysleft = [math.ceil((100-progresses[i])/speeds[i]) for i in range(len(progresses))] print(daysleft) while next!=len(progresses): now = next next+= 1 count = 1 for i in range(now +1, len(progresses)): if daysleft[now] >= daysleft[i]: count += 1 next+= 1 else: break answer.append(count) return answer |
3. 고찰
1) 알고리즘
이번에 개발되는 기능의 인덱스를 now, 바로 다음에 개발될 기능 인덱스를 next라는 변수로 선언하였다.
리스트 daysleft에 (남은 진도÷작업속도)를 올림하여 남은 일수를 저장하였다.
while loop를 돌리고, 종료조건은 다음 개발될 인덱스가 전체 작업 개수와 같으면 종료하도록 하였다.
저번 개발 기준 다음 인덱스(이전 while loop의 next)를 이번 개발 기준 현재 인덱스(현재 while loop의 now)에 담는다.
현재 while loop기준, 다음에 개발될 기능은 +1해준다.
이번에 개발되는 총 기능의 개수를 세기 위해 count변수를 도입하였고, 현재 count=1이다.
for문으로 뒤의 기능 중 함께 개발되는 기능이 있는지 체크하였고
if 작업일수가 적으면 함께 개발되므로 count +1, 다음 개발 시점에 인덱스도 하나 넘겨야 하므로 next +1
else 함께 개발되기 위해서는 연속적이어야 하는데, 아니면 이미 작업이 완료되었어도 개발될 수 없으므로 break
현재시점에서 개발이 끝났으므로 answer에 count를 추가하였다.
2) 올림 함수
math 모듈을 import해야 사용할 수 있다.
math.ceil( Number ) : 올림
math.floor( Number ) : 내림
math.round( Number ) : 반올림