import math
def solution(progresses, speeds):
answer = []
day = [] # 날짜 스택
for i in range(len(progresses)):
m = math.ceil((100 - progresses[i]) / speeds[i]) # 진도율 100%까지 걸리는 일 수
if len(day) == 0: # 스택이 비어 있으면
day += [m]
elif m > max(day): # 현재 인덱스의 날짜가 스택의 최댓값보다 크면(앞의 기능이 완성되어 스택이 비게 됨)
answer.append(len(day))
day = [m]
else:
day += [m]
if len(day) != 0:
answer.append(len(day))
return answer
def solution(progresses, speeds):
Q=[]
for p, s in zip(progresses, speeds):
# Q가 비어 있거나
# Q의 마지막 원소의 완료 예상 날짜보다 현재 완료 예상 날짜가 크면 Q에 새로운 완료 예상 날짜 추가
if len(Q)==0 or Q[-1][0]<-((p-100)//s):
Q.append([-((p-100)//s),1])
else:
Q[-1][1]+=1 # 마지막 원소의 완료 예상 날짜에 +1
# Q에는 각 날짜에 몇 개의 작업이 완료되는지가 기록되어 있음
# Q의 각 원소의 두 번째 값(같은 날짜에 배포되는 기능의 수)를 추출하여 리스트로 반환
return [q[1] for q in Q]
올림을 하기 위해 나는 math 라이브러리의 ceil 함수를 사용하였다.
math.ceil 없이 올림을 쓰는 방법이 있다는 것을 알게 되었다.
(p-100) => 음수
(p-100) // s => 내림한 음수
-((p-100)//s) => 올림한 양수