https://programmers.co.kr/learn/courses/30/lessons/42586

 

코딩테스트 연습 - 기능개발

프로그래머스 팀에서는 기능 개선 작업을 수행 중입니다. 각 기능은 진도가 100%일 때 서비스에 반영할 수 있습니다. 또, 각 기능의 개발속도는 모두 다르기 때문에 뒤에 있는 기능이 앞에 있는

programmers.co.kr


풀이 과정

progresses를 deque에 담고 deque의 맨 앞이 100 이상이면 deque의 맨 앞이 100 이하가 될 때 까지 오늘 완료된 작업의 개수를 1 늘리고 정답 리스트에 넣었다.

 

deque의 맨 앞이 100 미만이라면, deque에 있는 모든 요소들을 해당하는 speeds만큼 증가 시켰다.

 

위의 두 작업을 progresses deque가 빌 때까지 반복하였다. 그냥 리스트를 사용하면 list의 맨 앞이 100 이상인 경우에 pop(0)을 사용해야 하는데 이는 시간복잡도가 O(N)인 코드이므로 O(1)인 popleft()를 사용하기 위해서 deque를 사용하였디.

 

 


소스 코드

from collections import deque


def solution(progresses, speeds):
    answer = []
    end_progresses = []
    deque1 = deque(progresses)
    while(deque1):
        answer_value = 0
        
        while deque1[0] < 100:
            deque2 = deque()
            for i in range(len(end_progresses), len(progresses)):
                deque2.append(deque1.popleft() + speeds[i])
            deque1 = deque2

        while deque1 and deque1[0] >= 100:
            answer_value += 1
            end_progresses.append(deque1.popleft())


        answer.append(answer_value)

    return answer

+ Recent posts