알고리즘

프로그래머스 - 기능 개발 (스택,큐)

ghtis1798 2021. 6. 25. 20:05

🔸 문제접근방식

  1. progresses, speeds를 큐에 넣는다.
  2. progresses의 0번째 값이 100이상이면 꺼낸다.
    • speeds도 progress 꺼낼 때 0번째부터 함께 꺼낸다.
  3. 1일마다 speeds만큼 progresses를 더한다.
  4. progresses 원소를 모두 꺼낼 때까지 2-3을 반복한다.

💧 Source Code

from collections import deque

def solution(progresses, speeds):
    ''' https://programmers.co.kr/learn/courses/30/lessons/42586
    Notes:
        1. progresses를 큐에 넣고 100이상이면 꺼낸다.
        2. 1일마다 speeds만큼 progresses를 더한다.
        3. 하루마다 1,2번을 반복한다.

    Args:
        progresses (list): 프로세스 진행도(int)를 담은 리스트
        speeds (list): 프로세스 효율(int)을 담은 리스트

    Returns:
        answer (list): 배포버전마다 완성된 프로세스 수를 담은 리스트 
    '''

    answer = []
    progresses = deque(progresses)
    speeds = deque(speeds)

    while progresses:
        cnt = 0
        while progresses and progresses[0] >= 100:
            progresses.popleft()
            speeds.popleft()
            cnt += 1
        if cnt:
            answer.append(cnt)

        for i, speed in enumerate(speeds):
            progresses[i] += speed

    return answer


progresses = [93, 30, 55]
speeds = [1, 30, 5]
print(solution(progresses, speeds))