Today I Learned/Python 문제풀이

[프로그래머스] Lv2. 기능개발 (스택/큐)

하나719 2020. 10. 31. 20:56
반응형

문제 참고 링크

 

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

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

programmers.co.kr

아이디어

작업 완료인 100에서 현재까지 진행된 작업(progresses)를 빼면 , 남은 작업 수가 남고 speeds로 나누면 작업 완료까지 걸리는 일 수를 구할 수 있다. 

남은 일 수 list를 for문으로 검사하면서, 이번 배포에 포함할 수 있는 작업 수를 카운트하고, pop으로 리스트에서 빼준다.

이 계산을 list가 비워질때까지 진행한다.

 

Solution1. (내 풀이)

import math
def solution(progresses, speeds):
    
    day = []
    answer = []
    
    # 남은 작업 소요일 리스트로 만들기
    for i in range(len(progresses)):
        day.append(math.ceil((100 - progresses[i]) / speeds[i]))
    
    # list가 비워지면 멈춤
    while(len(day)>0):
    	# 배포 한번에 기본 작업 1개 진행됨
        num = 1
        
        # 첫번째 작업에 소요되는 시간
        first = day.pop(0)
        
        # 다음 작업과 비교해서 이번 배포에 포함 가능하면 num + 1, 아니면 for문 빠져나오기
        # 작업은 순차적으로 완성되기 때문에 만약 1번째, 3번째는 작업이 완료 되어도 2번째가 작업이 완료 안되면 3번쩨도 배포할 수 없음
        for i in day:
            if i <= first:
                num = num + 1
            else:
                break
        
        # 이번 배포에 포함될 작업 수 만큼 answer 리스트에 추가하고, day 리스트에서 제거하기
        answer.append(num)
        for i in range(num-1):
            day.pop(0)
            
        
    return answer

 

처음으로 lv2 문제를 풀어서 뿌듯하다!!!!

 

반응형