이래저래 고민했는데, 일단 (100-p)/s
를 계산해 각 기능을 개발하는 데에 드는 기간을 계산하고, for문을 돌려 첫 번째 기능 개발에 필요한 기간보다 더 짧게 걸리는 경우 count에 1씩 더하고 더 길게 걸리는 경우는 그때까지의 count를 answer에 추가하는 방식으로 방향을 잡았다.
처음부터 count를 1로 할당하고 재할당도 1로 하는 건 기준을 잡기 위해 저장하는 기능을 포함하기 위해서다.
중간에 고민했던 부분은 맨 처음 기능 개발에 필요한 시간을 기준=배포일
으로 잡는 부분이었는데, 0으로 잡고 시작하면 for문을 돌릴 때 크기를 비교한 후 append를 하려는 내 로직에 맞지 않았다. 그래서 기준과 for문에 필요한 분량을 [0]과 [1:]로 슬라이싱해 해결했다.
통과한 후 이 부분을 해결해보려고 했는데 지금 당장은 떠오르는 게 없다...
for문을 2번 돌리지 않고 해결하고 싶었는데, 이것도 뭔가 맘대로 되지 않아서 컴프리헨션과 계산을 따로 나누었다.
헷갈렸던 부분은 실패한 11번 테스트 케이스였다. 알고보니 처음 코드에 (100-p)//s
로 진행해서 정수를 나누면서 내림이 생겼던 거였다. math를 import해서 ceil()을 수행해 해결했다.
import math
def solution(progresses, speeds):
answer = []
requiredDates = [math.ceil((100-p)/s) for p, s in zip(progresses, speeds)]
distributeDate = requiredDates[0]
count = 1
for r in requiredDates[1:]:
if r <= distributeDate:
count += 1
else:
answer.append(count)
distributeDate = r
count = 1
answer.append(count)
return answer
각 기능을 개발하는 데에 걸리는 날짜를 먼저 계산한 건 괜찮은 생각이었던 것 같다.
for문을 1번만 쓸 수 있도록 합치고 있는데, 테스트 케이스 4개를 신명나게 틀리고 있고, 그 다음에는 프로그래머스 사이트가 안 열려서 일단 포스트는 여기서 마무리.