https://programmers.co.kr/learn/courses/30/lessons/42586
queue를 이용하는 문제입니다.
우선 문제부터 요약하면,
작업들의 진행상황과 일을 하는 속도가 나옵니다. 이것을 통해 작업들이 배포되어야 하는 날짜를 알 수 있습니다. 이때, 작업들의 list가 배포되어야 하는 우선순위대로 구성 되어 있을 때, 각 배포마다 몇개의 작업들이 release 되는지를 구해야 합니다.
예시를 들면, 만약 작업 1, 작업 2, 작업3 순서대로 배포 되어야 하는데, 걸리는 시간이 각각
작업1 : 10일 작업2 : 8일 작업3 : 15일 |
이라면, 작업 1이 완료 되었을 때 작업 1,2가 동시에 배포, 작업 3이 배포 이렇게 되어서 [2,1] 을 return 해야 합니다.
즉 solution(progresses, speeds)에
progresses : 먼저 배포되어야 하는 순서대로 작업의 진도가 적힌 정수배열
speeds : 각 작업의 개발 속도
가 input으로 들어 올 때,
각 배포마다 release되는 작업의 수를 구해야 합니다.
<Solution>
1. 각각 작업들이 걸리는 시간을 구한다음
2. queue에서 첫번째 작업을 pop 시킨후 이것 보다 작은 아이들을 모두 counting
하는 방식으로 코드를 진행하면 됩니다.
3. 이 과정을 작업 queue가 빌 때 까지 반복하면서 answer에 pop된 갯수들을 append 해야 합니다.
자세한 내용은 코드를 참고하길 바랍니다.
import math
from collections import deque
def solution(progresses, speeds):
progresses = list(map(lambda x: 100-x, progresses))
days = list(map(lambda x: math.ceil(x[0]/x[1]), zip(progresses, speeds)))
q = deque(days)
answer = []
while(q):
# print(q)
tmp = q.popleft()
num = 1
while(q):
new = q.popleft()
if tmp>=new:
num+=1
continue
else:
q.appendleft(new)
break
answer.append(num)
return answer
반응형
'코딩테스트 > Python 문제풀이' 카테고리의 다른 글
[프로그래머스] K번째수 (0) | 2022.06.14 |
---|---|
[프로그래머스] 디스크 컨트롤러 (0) | 2022.06.14 |
[프로그래머스] 전화번호 목록 (0) | 2022.06.13 |
[프로그래머스] 완주하지 못한 선수 (0) | 2022.06.13 |
[프로그래머스] 도둑질 (0) | 2022.06.12 |