즉, (100 - progresse) / speed 는 작업기간 term(t)
이전 작업기간(t1)이 이후 작업(t2)보다 걸리는 시간이 길면 기다렸다가 이전작업(t1)이 마치는 날에 같이 배포된다. 이때 max를 업데이트하는 과정이 중요하다.
의식의 흐름대로 작성한 나의 코드
def solution(progresses, speeds): terms=[] result =[] # 작업기간 구하기 for p,s in zip(progresses,speeds): terms.append(math.ceil((100 - p) / s)) # count = 0 max = terms[0] for term in terms: if max >= term: count +=1 else: result.append(count); max = term count = 1 result.append(count) return result
이런 풀이 방법도 있어요.
😆😆😆개인적으로 제 스타일인 풀이입니다.😆😆😆
map, lambda 는 오랜만에 보는거라 다시 공부해야겠어요
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
그리고 갓벽한 풀이방법도 있어요. 나도 이런 코드 짜고 싶다...😂😂😂
def solution(progresses, speeds): Q=[] for p, s in zip(progresses, speeds): if len(Q)==0 or Q[-1][0]<-((p-100)//s): Q.append([-((p-100)//s),1]) else: Q[-1][1]+=1 return [q[1] for q in Q]