프로그래머스 코딩테스트 고득점 Kit -
스택/큐
- Lv 2. 기능개발 (Python)
https://school.programmers.co.kr/learn/courses/30/lessons/42586
import math
def solution(progresses, speeds):
answer = []
# ([작업 진도], [개발 속도])
# 첫번째 기능 -> 두번째 기능 -> 세번째 기능
# 각 배포에 몇개의 기능이 배포되는지 return
# 각 기능 개발에 어느정도의 기간이 걸리는지 개산하여 release_arr에 append
release_arr = []
for i in range(len(progresses)):
release_arr.append(math.ceil((100 - progresses[i]) / speeds[i]))
# release_arr을 돌면서 하나씩 꺼내면서 꺼낸 요소와 남아있는 요소를 순서대로 비교하기
for j in range(len(release_arr)):
if (len(release_arr) == 0): # 비어있다면 break
break
count = 1
tmp = release_arr.pop(0) # 맨 앞 요소부터 꺼내어 비교하기
# 비어있지 않을 때까지 배열 돌기
while (release_arr):
r = release_arr[0] # 맨 앞 요소를 꺼냈으니 현재 0번째 인덱스는 꺼낸 맨 앞 요소의 바로 다음 요소
if (r <= tmp): # 만약 앞 기능의 개발 기간이 더 오래 걸린다면 -> 이번 기능은 그 앞 기능이 완료된 후 나올 수 있으므로 count + 1
count += 1
release_arr.pop(0)
else:
break
answer.append(count)
return answer
(100 - 현재 진도) / 속도
를 올림하면 현재 남은 진도를 완료하게 되는 기간이 나온다.release_arr
배열에 넣어둔다.for
문에서 release_arr
배열을 하나씩 돌며 왼쪽부터 하나씩 꺼내어 비교한다. (큐처럼)tmp
변수에 저장해둔 뒤, while
문을 통해 왼쪽부터 시작해서 남아있는 기간들 중 해당 기능이 더 오래 걸려서 이 기능이 완성되고 난 후 배포가 같이 될 요소들을 카운트 한다.while
문을 다 돌고나서는 answer
에 카운트 한 답을 차례대로 넣어준다.루프 하나로 한번에 돌게하는 정답 코드
def solution(progresses, speeds):
print(progresses)
print(speeds)
answer = []
time = 0
count = 0
while len(progresses)> 0:
if (progresses[0] + time*speeds[0]) >= 100:
progresses.pop(0)
speeds.pop(0)
count += 1
else:
if count > 0:
answer.append(count)
count = 0
time += 1
answer.append(count)
return answer