문제 링크 : programmers.co.kr/learn/courses/30/lessons/42586

 

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

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

programmers.co.kr

 

queue에 각 작업마다 배포가 몇 일 후에 진행될 수 있는지를 저장한다.

이 때, 뒤에 있는 기능이 앞에 있는 기능보다 먼저 개발되면 뒤에 있는 기능은 앞에 있는 기능이 배포될 때 함께 배포된다. 따라서

여기서 저장하려는 배포 일자가 queue에 저장된 최대 배포 일자보다 크면 그동안 queue에 저장된 작업들을 배포할 수 있으므로 answer에 queue의 길이를 저장하고, queue를 비운다.

이러한 과정을 반복하고, 과정이 끝나면 queue에 남아 있는 작업들이 있을 수 있으므로 queue에 남은 작업이 있으면 queue의 길이를 answer에 추가한다.

import math
from collections import deque

def solution(progresses, speeds):
    answer = []
    
    queue = deque()
    max_work_day = -1
    for progress, speed in zip(progresses, speeds):
        work_day = math.ceil((100 - progress) / speed) # 배포까지 걸리는 시간
        
        if max_work_day < work_day:
            if len(queue) > 0:
                answer.append(len(queue))
            
            queue.clear()
                
            max_work_day = work_day
            
        queue.append(work_day)
    
    if len(queue) > 0:
        answer.append(len(queue))
        
    return answer

 

 

 

+ Recent posts