[프로그래머스 Lv2] 기능개발 (파이썬)

Jewon Joel Park·2022년 6월 8일
0

Programmers-solution

목록 보기
17/34

문제 링크


문제 설명

먼저 배포되어야 하는 순서대로 개발 진척도(progresses)와 개발 속도(speeds)가 주어질 때, 각 배포마다 몇 개의 기능이 배포되는지를 반환하는 함수 작성


풀이 코드

def solution(progresses, speeds):
    answer = []
    while len(progresses) > 0:
        count = 0
        
        idx = 0
        for progress, speed in zip(progresses, speeds):
            progresses[idx] += speed
            idx += 1
            
        for i in range(len(progresses)):
            if progresses[0] >= 100:
                count += 1
                progresses.pop(0)
                speeds.pop(0)

        if count > 0:
            answer.append(count)
    return answer

코드 설명

  1. 완료된 progresses 개체 내 요소는 제거할 계획이므로 while Loop의 조건은 개체 내 요소가 존재하지 않을 때 까지 반복하도록 설정
  2. 결과를 저장할 answer 리스트 안에 넣을 값인 count 설정
  3. 첫 번째 for Loop으로 하루가 지났을 때의 progresses 값을 얻기 위해 인덱스를 부여하여 각 인덱스 별 요소에 해당 speed 값을 더함.
    이 때, enumerate(zip(progresses, speeds))를 써도 되지만, 언패킹할 때 정수와 튜플로 받아오게되어 한번 더 언패킹을 해야하는 단점이 있으므로 직관성을 위해 별도의 인덱스로 작업하였음.
  4. 두 번째 for Loop으로 progresses 배열의 첫 개체가 100 이상인지 확인하여 이에 해당할 경우 count값을 1 증가시키고, 처리가 끝난 값이므로 progressesspeeds 배열에서 pop(0)하여 이후 작업에서 열외되도록 설정
  5. 작업이 끝났을 때 count 값이 1 이상일 경우 answer 리스트에 count값을 추가하고 다시 while Loop 시작

P.S. 로직은 5분 만에 짰는데 speeds.pop(0)를 빼먹어서 디버깅만 25분 했던게 함정..

profile
10년을 돌고 돌아 마침내 제자리를 찾은 문과 출신 Python 개발자의 인생기록장

0개의 댓글