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
'알고리즘 문제 풀이 > 프로그래머스' 카테고리의 다른 글
프로그래머스 - 가장 큰 수 [파이썬] (0) | 2022.06.23 |
---|---|
프로그래머스 - 더 맵게 [파이썬] (0) | 2022.06.23 |
프로그래머스 - 위장 [파이썬] (0) | 2022.06.22 |
프로그래머스 - 시저 암호 [파이썬] (0) | 2022.06.22 |
프로그래머스 - 전화번호 목록 [파이썬] (0) | 2022.06.18 |