https://school.programmers.co.kr/learn/courses/30/lessons/42586
import math
def solution(progresses, speeds):
answer = []
time_list = []
cnt = 0
# 남은 일수 계산
for i,j in zip(progresses, speeds):
time = math.ceil((100-i)/j)
time_list.append(time)
idx = 0
for i in range(len(time_list)):
if time_list[idx] < time_list[i]:
answer.append(i-idx)
idx = i
# 마지막 idx일시 진행
if i == len(time_list)-1:
answer.append(len(time_list)-idx)
return answer
progress의 남은 퍼센트와 speeds를 나누어 남은 일수를 계산한다.(math.ceil을 통해 소수점이 있으면 올림을 통해 남은 일수를 계산하는 것이 핵심이다.)
[math.ceil 함수 정리]
https://velog.io/@jsanga214/%EC%BD%94%ED%85%8C%EC%A4%80%EB%B9%84-math
idx를 0으로 고정하고 for문을 통해 0부터 순차적으로 증가하면서 idx와 크기 비교를 진행한다.
idx보다 for문을 통한 i의 인덱스 값이 더 크다면 i-idx를 통해 그만큼의 갯수를 계산하여 answer에 추가하고, 변수 idx에 i를 넣고 계속 진행한다.
for문을 순차적으로 증가시키고 마지막 idx의 값일 경우 무조건 배포가 되기 때문에 answer에 추가하고 최종적으로 answer을 return 한다.
import math
from collections import deque
def solution(progresses, speeds):
answer = []
time_list = deque()
cnt = 1
## 남은 일수 비교
for i, j in zip(progresses, speeds):
time = math.ceil((100-i)/j)
time_list.append(time)
# 초기값 설정
cur_progress = time_list.popleft()
while len(time_list) > 0:
next_progress=time_list.popleft()
# 현재 대기열의 남은 일수와 다음 대기열의 남은 일수를 비교
if cur_progress >= next_progress:
cnt +=1
else:
answer.append(cnt)
cur_progress = next_progress
cnt = 1
# time_list의 마지막일 때 answer에 값 추가
if len(time_list)==0:
answer.append(cnt)
return answer