- 각 기능별로
(100-progress)/(speed)
를 올림으로 계산해 몇 일뒤에 완성되는지 알아낸다.- 앞기능이 뒷기능보다 남은 일수가 많이 남았다면, 앞기능의 남은 일수보다 적은 뒷기능들을 같이 배포한다.
2020.
def solution(progresses, speeds):
progresses = [-((p-100)//s) for p, s in zip(progresses, speeds)]
result = []
for i in range(len(progresses)):
if len(result)==0 or result[-1][0] < progresses[i]:
result.append([progresses[i],1])
else:
result[-1][1] += 1
return [i[1] for i in result]
2022.5.9
import math
def solution(progresses, speeds):
days = []
for p, s in zip(progresses, speeds):
days.append(math.ceil((100-p)/s))
idx = 0
result = [1]
for i in range(1, len(days)):
if(days[idx] >= days[i]):
result[-1] += 1
else:
idx = i
result.append(1)
return result
math.ceil() 없이 올림처리 하는 방법
=> (p-100) => 음수, (p-100) // s => 내림한 음수(음수에서 내림은 절대값은 커짐), -((p-100)//s) => 올림한 양수
+ 다른 사람의 풀이
from math import ceil
def solution(progresses, speeds):
daysLeft = list(map(lambda x: (ceil((100 - progresses[x]) / speeds[x])), range(len(progresses))))
count = 1
retList = []
for i in range(len(daysLeft)):
try:
if daysLeft[i] < daysLeft[i + 1]:
retList.append(count)
count = 1
else:
daysLeft[i + 1] = daysLeft[i]
count += 1
except IndexError:
retList.append(count)
return retList
앞 기능의 남은 일수가 뒷 기능의 남은 일수보다 크거나 같으면, 앞 기능의 남은 일수를 뒤에 붙여넣기함으로써 인덱스 변수를 따로 사용하지 않고 비교할 수 있게 했다.