https://school.programmers.co.kr/learn/courses/30/lessons/42586?language=python3
import math
def solution(progresses, speeds):
answer = []
curr_day = 0
count = 0
for idx, progress in enumerate(progresses):
remain = math.ceil((100 - progress) / speeds[idx])
if curr_day >= remain:
count += 1
else:
if count != 0:
answer.append(count)
curr_day = remain
count = 1
if count > 0:
answer.append(count)
return answer
현재 일감의 걸리는 시간이 현재의 일 수보다 낮으면 같이 배포하고 크다면 다음 배포의 시작점으로 지정하면서 배포 일감의 개수를 구하였다.
def solution(progresses, speeds):
Q = []
for progress, speed in zip(progresses, speeds):
if len(Q)==0 or Q[-1][0] < -((progress-100)//speed):
Q.append([-((progress-100)//speed), 1])
else:
Q[-1][1] += 1
return [q[1] for q in Q]
Q를 2차 배열로 만들어 [걸리는 시간, 배포할 일감 개수]를 기록하여 푼 풀이
-((progress-100)//speed)
이 수식이 매우 인상적이었다.
만약 progress=30, speed=30일 때 (100-progress) / speed = 2.33 이다. 나는 math.ceil을 통해 올림 처리를 하였는데, 해당 풀이에서는 음수에서의 내림은 양수에서의 올림과 같다는 것을 이용하였다.
즉, -2.3 내림 = -3 ⇒ 2.3의 올림 = 3 이다.
https://school.programmers.co.kr/learn/courses/30/lessons/42586 - 다른 사람 풀이