코딩테스트

[프로그래머스] 기능개발 - Lv.2

pyflu 2023. 9. 2. 20:52

[프로그래머스] 기능개발 Lv.2 - [파이썬/python]

 

https://school.programmers.co.kr/learn/courses/30/lessons/42586

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr


 

 

문제 설명

 

 

progresses의 각 기능의 진도가 100%이상 일 때 서비스에 반영할 수 있다.

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

각 배포마다 몇 개의 기능이 배포되는지를 반환(return) 문제 입니다.

 

 

※ 제한사항


  • 작업의 개수(progresses, speeds배열의 길이)는 100개 이하입니다.
  • 작업 진도는 100 미만의 자연수입니다.
  • 작업 속도는 100 이하의 자연수입니다.
  • 배포는 하루에 한 번만 할 수 있으며, 하루의 끝에 이루어진다고 가정합니다. 예를 들어 진도율이 95%인 작업의 개발 속도가 하루에 4%라면 배포는 2일 뒤에 이루어집니다.

 

 

더보기
  • for문을 사용하여 각 기능에 대한 진도를 하루씩 업데이트 해보기


  • progresses배열의 첫 인덱스가 100이상이 될 때 다음 인덱스도 100이상인지 while문과 인덱스를 통해 확인해보기


  • 만약 while문을 통해 확인이 되었다면 몇 번 while문을 통과했는지 count를 세서 한 번에 몇 개의 기능이 배포되었는데 반환해보기

 

 

 




정답 주의!!!




 

 


def solution(progresses, speeds):
   
    result = []  # 각 배포마다 완료된 작업 수를 저장할 리스트
   
    # 아직 작업 중인 경우 반복
    # speeds가 빈 배열이 아닐 땐 True 반환, 빈 배열일 땐 False 반환
    while speeds:
       
        # 각 작업의 1일씩 진도 업데이트
        for idx, speed in enumerate(speeds):
            progresses[idx] += speed

        count = 0  # 배포할 작업 수를 세는 변수

        # 맨 앞 작업 진도가 100% 이상되면, progresses와 speeds 리스트에서 해당 작업 제거하고 작업 수 증가
        # progresses가 빈 배열이 아닐 땐 True 반환, 빈 배열일 땐 False 반환
        while progresses and progresses[0] >= 100:
            del progresses[0], speeds[0]
            count += 1
       
        # 배포될 작업 수를 결과 리스트에 추가
        if count > 0:
            result.append(count)

    return result

728x90