https://programmers.co.kr/learn/courses/30/lessons/42586
문제 분류가 스택/큐로 되어 있길래 while문으로 day를 +1씩 하면서 첫 값이 100 이상이 되면 100을 넘은 값들을 pop을 하는 식으로 풀려고 했었다. 그런데 새로운 리스트를 만들어서 기능을 완료하기까지 필요한 시간을 담아두면 굳이 while문이 필요 없을 것 같아서 방법을 변경했다.
일단 for문을 돌면서 기능을 완료하기까지의 시간을 담는데, 여기서 round()
를 사용했어서 테스트 케이스 2개가 틀렸었다. 반올림이 아니라 올림을 해야 한다.
이후에는 이전 값(prev)을 기준으로 prev 이하인 값들을 카운트하고, prev보다 큰 값이 나오면 지금까지 카운트한 값을 answer 리스트에 추가한 뒤 prev와 cnt 값을 현재 값을 기준으로 변경한다.
for문을 다 돌고 나면 마지막 값은 if문에서 걸렸든 else문에서 걸렸든 answer에 추가되지 못하고 끝나므로, 마지막에 한 번 더 cnt 값을 추가해준다.
import math
def solution(progresses, speeds):
answer = []
remains = []
length = len(progresses)
for i in range(length):
tmp = math.ceil((100 - progresses[i]) / speeds[i])
remains.append(tmp)
prev = remains[0]
cnt = 1
print(remains)
for i in range(1, length):
if remains[i] <= prev:
cnt += 1
else:
answer.append(cnt)
prev = remains[i]
cnt = 1
answer.append(cnt)
return answer