유형: 스택/큐

풀이 시간: 20분

 

def solution(progresses, speeds):
    answer = []
    lefttime = []
    for i in range(len(progresses)):
        days = (100 - progresses[i]) // speeds[i]
        if ((100 - progresses[i]) % speeds[i]) != 0:
            days += 1
        lefttime.append(days)

    while lefttime:
        popped = lefttime.pop(0)
        acc = 1
        while lefttime and lefttime[0] <= popped:
            lefttime.pop(0)
            acc += 1
        answer.append(acc)
    return answer

 

작은 실수를 해서 헤매었다...

우선 앞부분에서는 주어진 진행률과 진행도를 이용해 남은 소요일을 구한다. 이것은 스택과 같다.

아랫부분에서는 stack의 top이 pop되어 있는 원소보다 작은 동안 top을 pop한다. 

 

        while lefttime and lefttime[0] <= popped:
            lefttime.pop(0)
            acc += 1

 

이 부분에서 실수했음... 

[5, 1, 1, 1, 6] 과 같은 경우 맨 앞의 5를 기준으로 5보다 작은 아이들이 pop되어야 하므로 여기에서는 popped를 갱신하면 안 된다. 그런데 갱신해서 "가장 큰 숫자(현재 날짜)" 가 아닌 "그 전에 pop된 숫자" 랑 비교하게 됨.

너무 바보같은 실수.. 

복사했습니다!