[프로그래머스] 기능개발 - PYTHON

NoowaH·2021년 9월 15일
0

Programmers

목록 보기
4/8
post-thumbnail
post-custom-banner

'프로그래머스 - 기능개발'

문제 설명

프로그래머스 팀에서는 기능 개선 작업을 수행 중입니다. 각 기능은 진도가 100%일 때 서비스에 반영할 수 있습니다.

또, 각 기능의 개발속도는 모두 다르기 때문에 뒤에 있는 기능이 앞에 있는 기능보다 먼저 개발될 수 있고, 이때 뒤에 있는 기능은 앞에 있는 기능이 배포될 때 함께 배포됩니다.

먼저 배포되어야 하는 순서대로 작업의 진도가 적힌 정수 배열 progresses와 각 작업의 개발 속도가 적힌 정수 배열 speeds가 주어질 때 각 배포마다 몇 개의 기능이 배포되는지를 return 하도록 solution 함수를 완성하세요.

제한 사항
  • 작업의 개수(progresses, speeds배열의 길이)는 100개 이하입니다.
  • 작업 진도는 100 미만의 자연수입니다.
  • 작업 속도는 100 이하의 자연수입니다.
  • 배포는 하루에 한 번만 할 수 있으며, 하루의 끝에 이루어진다고 가정합니다. 예를 들어 진도율이 95%인 작업의 개발 속도가 하루에 4%라면 배포는 2일 뒤에 이루어집니다.
입출력 예
progresses										
[93, 30, 55]					
[95, 90, 99, 99, 80, 99]
speeds	
[1, 30, 5]	
[1, 1, 1, 1, 1, 1]
return
[2, 1]
[1, 3, 2]


✔ My Solution - Queue


import math

def solution(progresses, speeds):
    answer = []
    n = len(progresses)
    days = []
    
    for i in range(n):
        pLeft = 100 - progresses[i]
        daysLeft = math.ceil(pLeft / speeds[i])
        days.append(daysLeft)
        
    while days:
        count = 1
        d = days.pop(0)
        while len(days) != 0 and d >= days[0]:
            count += 1
            days.pop(0)
            
        answer.append(count)   
         
    return answer

step 1

answer = []
n = len(progresses)
days = []

answer =[]
◾ return value를 모을 answer list 생성

n = len(progresses)
◾ len(parameter) 을 알고리즘 풀이를 할 떄 자주 사용하는것 같아 변수화 시킴

days = []
◾ 각 기능의 남은 일정을 담는 리스트
◾ queue 로 사용될 리스트



step 2

    for i in range(n):
        pLeft = 100 - progresses[i]
        daysLeft = math.ceil(pLeft / speeds[i])
        days.append(daysLeft)

pLeft
◾ 각 기능 남은 진도

daysLeft
◾ 각 기능의 남은 진도를 완료하기 위해 필요한 일수
math.ceil()을 통해 정수처리한다

days.append(daysLeft)
◾ 남은 일수 리스트화
◾ 입출력 예 1 = [ 7, 3, 9 ]



step 3

while days:
        count = 1
        d = days.pop(0)
        while len(days) != 0 and d >= days[0]:
            count += 1
            days.pop(0)
            
        answer.append(count)   

count = 1
◾ answer[] 의 리턴할 값은 최소 1이다
days[]에서 첫번 쨰 일수를 다음 일수와 비교한다
◾ 앞 순서 프로젝트가 다음 프로젝트보다 오래 걸린다면 count 수 추가
◾ 비교연산이 끝날 떄마다 다음 일수와 비교를 위해 days.pop(0)


입출력 예 1
◾ 첫 기능 은 7일 이 필요하고 3일이 필요한 다음 기능보다 많기 때문에 count += 1
answer.append(count) - 반복문이 끝날 때 마다 리턴할 정답 리스트에 추가

profile
조하운
post-custom-banner

0개의 댓글